我无法找到向 Pivotal Cloud Foundry 中的所有应用程序实例发送/广播消息的方法。我们如何向所有应用实例通知某些事件?如果我们使用 HTTP 请求,PCF 路由器会将其调度到应用程序的单个实例。我们如何解决这个问题?
@Florian所说的可能是更安全的选择,但如果你想要快速简便的东西,可以使用X-CF-APP-INSTANCE
标头将 HTTP 请求直接发送到应用程序实例。标头的格式为YOUR-APP-GUID:YOUR-INSTANCE-INDEX
。
https://docs.cloudfoundry.org/concepts/http-routing.html#app-instance-routing
因此,给定一个应用 guid,您可以迭代实例数,例如 0 到 5,并为每个实例发送 HTTP 请求。确保检查响应以确认每个响应都成功。
这还要求你知道应用的应用 guid(即cf app <name> --guid
( 和应用的实例数。
CF 开箱即用,不提供任何应用程序可以订阅的事件队列机制。
我会做什么(假设你有两个应用程序实例 A 和 B(:
- 在应用程序代码中提供一个事件端点,例如 POST/api/event(或者,如果事件应该来自另一个应用(例如另一个微服务(,这个可以直接将消息发送到队列中(
- 所有应用实例都在内部事件队列中侦听新事件
- 实例 A 接收来自 CF 路由器的调用,并通过在内部事件队列上发出事件来处理它,实例不会对事件做出反应,但
- 当 A 发布事件时,A 和 B 接收事件并相应地处理它
现在,您可以使用的内部事件队列在很大程度上取决于您的部署。在AWS上,您可能可以使用SQS或SNS或类似的东西。据我所知,PCF也可能提供一个消息传递系统,也适合这里,rabbitmq。您还可以使用其他服务的功能来订阅事件,例如 redis(发布/订阅命令(或类似命令。
但是,如果您更具体地提供有关要实现的目标的更多信息,则可以提供更详细的答案。