Bus 内部提供了EnvironmentBusEndpoint这个 Endpoint 通过 message broker 用来新增/更新配置。
访问任意节点该 Endpoint 对应的 url: /actuator/bus-env?name=hangzhou&value=alibaba 进行配置项的新增(比如访问 node1 的url):
curl -X POST ‘http://localhost:10001/actuator/bus-env?name=hangzhou&value=alibaba’ -H ‘content-type: application/json’
然后再次访问所有节点/bus/env获取配置:
$ curl -X GET ‘http://localhost:10001/bus/env?key=hangzhou’
-
unknown%
- ⌚
$ curl -X GET ‘http://localhost:10002/bus/env?key=hangzhou’
-
unknown%
- ⌚
$ curl -X GET ‘http://localhost:10003/bus/env?key=hangzhou’
-
unknown%
- ⌚
$ curl -X GET ‘http://localhost:10004/bus/env?key=hangzhou’
-
unknown%
- ⌚
$ curl -X GET ‘http://localhost:10005/bus/env?key=hangzhou’
-
unknown%
- ⌚ $ curl -X POST ‘http://localhost:10001/actuator/bus-env?name=hangzhou&value=alibaba’ -H ‘content-type: application/json’
- ⌚
$ curl -X GET ‘http://localhost:10005/bus/env?key=hangzhou’
-
alibaba%
- ⌚
$ curl -X GET ‘http://localhost:10004/bus/env?key=hangzhou’
-
alibaba%
- ⌚
$ curl -X GET ‘http://localhost:10003/bus/env?key=hangzhou’
-
alibaba%
- ⌚
$ curl -X GET ‘http://localhost:10002/bus/env?key=hangzhou’
-
alibaba%
- ⌚
$ curl -X GET ‘http://localhost:10001/bus/env?key=hangzhou’
alibaba%
可以看到,所有节点都新增了一个 key 为hangzhou的配置,且对应的 value 是alibaba。这个配置项是通过 Bus 提供的 EnvironmentBusEndpoint 完成的。
这里引用 程序猿DD 画的一张图片,Spring Cloud Config 配合 Bus 完成所有节点配置的刷新来描述之前的实例(本文实例不是刷新,而是新增配置,但是流程是一样的):
比如在 node1 上指定 destination 为 rocketmq-bus-node2 ( node2 配置了 spring.cloud.bus.id 为rocketmq-bus-node2:10002,可以匹配上) 进行配置的修改:
curl -X POST ‘http://localhost:10001/actuator/bus-env/rocketmq-bus-node2?name=hangzhou&value=xihu’ -H ‘content-type: application/json’
访问/bus/env 获取配置(由于在 node1 上发送消息,Bus 也会对发送方的节点 node1 进行配置修改):
~ ⌚
-
$ curl -X POST ‘http://localhost:10001/actuator/