组件依赖

组件连接信息管理

连接信息的作用

当前组件被其他组件依赖时,如果需要注入相关变量给对方以方便对方连接自己。连接信息的实质是环境变量,只是其生效范围是自身和依赖自己的所有组件。比如一个MYSQL组件拥有连接信息 MYSQL_HOST、MYSQL_PORT、MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE。这些信息是其他组件连接 mysql的关键信息,当组件依赖mysql后会自动得到上述的环境变量从而动态的获取到相关信息。

添加连接信息

连接信息完全可以在 组件管理-依赖管理 模块自定义添加和删除,当组件端口开启对内组件后,会自动生成 XXX_HOST XXX_PORT的变量信息,这类连接信息如果需要在 端口管理 模块点击端口别名进行修改。

组件依赖管理

组件为什么要依赖其他组件

当一个独立的业务系统不能完成所有功能时,就需要借助其他的组件来实现。如web组件一般都需要数据库存储数据,前端页面展现程序需要调用后端API组件获取数据等等。因此组件依赖的实质是建立与其他组件通信的链路。在Rainbond中,我们默认采用ServiceMesh的组件网络治理方式处理组件之间的通信,当组件需要请求其他组件时,必须显示的建立依赖关系,从而Rainbond将通过内置的组件注册和组件发现机制发现对方的组件地址,在当前组件的网络空间内建立起本地监听来负载均衡到目标组件的所有实例上。

graph LR; A[组件A] —>|127.0.0.1:8080 | C{envoy} C —>|192.168.0.1:8080 | D[组件B实例1] C —>|192.168.0.2:8080 | E[组件B实例2]

当组件未开启组件网络治理插件的情况下,Rainbond默认采用envoy 4层通信模型进行网络治理,开通治理插件即可在7层进行网络治理,设置更多路由或限流策略。

Rainbond中不管时内置组件还是第三方组件,通信维护方式都是一致的。

组件如何连接依赖组件

当组件开启对内组件后,其他组件才能通过【添加依赖组件】的方式进行关联,组件与依赖的组件建立起关联后,下一步就是连接依赖组件。

在【依赖】页面中的 【依赖应用信息】可以看到已经依赖的组件:

组件依赖 - 图1

获取连接信息

选择其中一个依赖组件,点击【连接信息】会弹出连接信息页面: 组件依赖 - 图2

连接信息分为两类:

  • 变量名 > 当组件的端口打开对内组件后,会生成一个默认的端口别名这个别名就是该组件的连接信息的前缀。如一个内部的API组件,端口别名是 USERAPI 则,其他组件与该API建立关联后,就可以通过 USERAPI_HOST 找到API组件的连接IP,通过USERAPI_PORT 找到API组件的端口号,如果还需要添加其他的变量名,可以通过 【依赖】–【组件连接信息】添加更多的依赖相关的变量。

  • 变量值 > 组件可以通过确定的变量值来连接被依赖(打开对内组件)的组件,我们不推荐使用这种方式连接,这种方式属于硬编码,所有配置都写死到代码中,对于业务安全与程序灵活性都有影响。我们推荐使用环境变量名的方式连接组件

组件连接依赖组件

当组件添加了依赖,并且查看了连接信息后,下一步就是修改组件的配置,连接依赖的组件,以Springcloud程序为例介绍通过环境变量的形式连接依赖的组件:

application.yml 文件

  1. ...
  2. spring:
  3. data:
  4. mysql:
  5. host: ${MYSQL_HOST}
  6. username: ${MYSQL_USER}
  7. password: ${MySQL_PASS}
  8. database: ${MYSQL_DB}
  9. port: ${MYSQL_PORT}
  10. ...

其他各类语言都有获取环境变量的方法,如果不想用环境变量,也可以使用直接变量值,但按照十二要素原则,我们不推荐使用硬编码的方式连接组件。