服务间通信变量注入
通信变量是指使用其他组件提供服务时的必要配置变量,比如数据库的用户名密码和通信地址,API 服务的认证方式和通信地址等等。标准化的设计场景中,成形的业务代码依赖的服务类型不能改变,但是实际依赖的服务可以改变,这种设计需要依靠以环境变量的方式注入配置信息。在 组件间通信 文中用例就是依靠标准的变量注入实现服务动态依赖。
在组件开发过程中,我们推荐开发者使用环境变量的方式来定义与其他组件通信的相关配置,例如 spring boot 使用以下方式配置 jdbc 地址:
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DATABASE:test}
spring.datasource.username=${MYSQL_USER}
spring.datasource.password=${MYSQL_PASSWORD}
经过如上定义后,我们其实定了一个规范,这个业务组件需要一个 Mysql 组件,且通过以上变量进行定义相关配置。后续我们使用什么组件来提供这个服务其实就是解耦合的,我们可以定义一个 Mysql 组件来提供,也可以定义一个 Tidb 组件来提供,最关键的是这些组件可以提供上述需要的变量信息。因此通信变量注入是组件依赖通信场景中一个非常有用的机制。