|
此版本仍在开发中,目前尚不稳定。如需最新稳定版本,请使用 spring-cloud-bus 5.0.1! |
处理实例
处理实例
每个应用程序实例都有一个服务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 的一部分。Cloud Foundry 则提供一个索引以进行区分。为确保在 Cloud Foundry 外部 ID 是唯一的,请将 spring.application.index 设置为每个服务实例所独有的值。