处理实例

处理实例

每个应用程序实例都有一个服务ID,其值可以通过spring.cloud.bus.id设置,预期值为一个由冒号分隔的标识符列表,从最不具体到最具体排列。默认值根据环境构建,是spring.application.nameserver.port(或spring.application.index,如果已设置)的组合。ID的默认值以app:index:id的形式构建,其中:spring-doc.cadn.net.cn

  • appvcap.application.name,如果存在的话,则为 spring.application.namespring-doc.cadn.net.cn

  • indexvcap.application.instance_index,如果它存在;spring.application.indexlocal.server.portserver.port0(按此顺序)。spring-doc.cadn.net.cn

  • idvcap.application.instance_id,如果存在的话;否则为随机值。spring-doc.cadn.net.cn

HTTP 端点接受一个名为“目标”(destination)的路径参数,例如 /busrefresh/customers:9000,其中 destination 是服务 ID。如果该 ID 属于总线上的某个实例,则由该实例处理消息,而其他所有实例则忽略它。spring-doc.cadn.net.cn

处理服务的所有实例

“destination”参数在Spring PathMatcher(路径分隔符为冒号——:)中用于确定实例是否处理该消息。以先前示例为例,/busenv/customers:** 指向所有“customers”服务的实例,而不论服务ID的其余部分如何。spring-doc.cadn.net.cn

服务 ID 必须唯一

总线会尝试两次以消除处理事件——一次从原始 ApplicationEvent 中,另一次从队列中。为此,它会将发送服务 ID 与当前服务 ID 进行比对。如果同一服务的多个实例具有相同的 ID,则事件将不会被处理。在本地机器上运行时,每个服务位于不同的端口上,而该端口号是 ID 的一部分。Cloud Foundry 则提供一个索引以进行区分。为确保在 Cloud Foundry 外部 ID 是唯一的,请将 spring.application.index 设置为每个服务实例所独有的值。spring-doc.cadn.net.cn