【问题标题】:How to send events to all instances of the application in PCF如何在 PCF 中向应用程序的所有实例发送事件
【发布时间】:2020-05-19 10:03:26
【问题描述】:

我无法找到向 Pivotal Cloud Foundry 中的所有应用程序实例发送/广播消息的方法。我们如何向所有应用程序实例通知某些事件?如果我们使用 HTTP 请求,PCF 路由器会将其分派给应用程序的单个实例。我们该如何解决这个问题?

【问题讨论】:

    标签: java spring spring-boot cloud-foundry pcf


    【解决方案1】:

    @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)和应用的实例数。

    【讨论】:

    • 是的.. @Florian 解决方案可用于频繁/更安全。购买我的案例只是在运行时打开标志,而不是经常打开。
    【解决方案2】:

    CF 开箱即用,不提供任何可供应用订阅的事件队列机制。

    我会做什么(假设您有两个应用实例 A 和 B):

    • 在您的应用程序代码中提供一个事件端点,例如POST /api/event(或者,如果事件应该来自另一个应用程序(例如另一个微服务),这个可以直接将消息发送到队列中)
    • 所有应用实例都在内部事件队列上监听新事件
    • 实例 A 接收到来自 CF 路由器的调用并通过在内部事件队列上发出一个事件来处理它,实例不会对该事件做出反应,但是
    • A 发布事件时,A 和 B 接收到该事件并进行相应处理

    现在,您可以使用的内部事件队列在很大程度上取决于您的部署。在 AWS 上,您可能可以使用 SQSSNS 或类似的东西。据我所知,PCF 也可能提供一个适合这里的消息传递系统rabbitmq。您还可以使用其他服务的功能来订阅事件,例如 redis (pub/sub commands) 或类似的。

    不过,如果您提供更多关于您想要实现的目标的详细信息,则可以提供更详细的答案。

    【讨论】:

    • 弗洛里安 +1 为您的解决方案。但它不匹配/适合我的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2015-05-03
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多