寻址实例
对实例进行寻址
应用程序的每个实例都有一个服务 ID,其值可以通过spring.cloud.bus.id
并且其值应为冒号分隔的
标识符,按从最不具体到最具体的顺序。默认值为
从环境中构造为spring.application.name
和server.port
(或spring.application.index
,如果已设置)。ID 的默认值为
以app:index:id
哪里:
-
app
是vcap.application.name
(如果存在)或spring.application.name
-
index
是vcap.application.instance_index
,如果存在,spring.application.index
,local.server.port
,server.port
或0
(按此顺序)。 -
id
是vcap.application.instance_id
、如果存在或随机值。
HTTP 终端节点接受 “destination” 路径参数,例如/busrefresh/customers:9000
哪里destination
是服务 ID。如果 ID
由总线上的实例拥有,则它处理消息和所有其他实例
忽略它。
寻址服务的所有实例
“destination” 参数在 Spring 中使用PathMatcher
(使用路径分隔符
替换为冒号 —:
) 来确定实例是否处理消息。使用示例
从之前开始,/busenv/customers:**
以
“customers” 服务,而不考虑服务 ID 的其余部分。
服务 ID 必须唯一
总线尝试两次来避免处理事件 — 一次从原始ApplicationEvent
一次从队列中。为此,它会检查发送服务 ID
针对当前服务 ID 的 ID 进行验证。如果服务的多个实例具有相同的 ID,
不处理事件。在本地计算机上运行时,每个服务位于不同的
port 的 port 中,该 port 是 ID 的一部分。Cloud Foundry 提供了一个索引来区分。
要确保 ID 在 Cloud Foundry 外部是唯一的,请将spring.application.index
自
对于每个服务实例来说都是唯一的。