【问题标题】:How to use Control bus in Spring integration to start/stop integration components from another JVM如何在 Spring 集成中使用控制总线从另一个 JVM 启动/停止集成组件
【发布时间】:2021-12-22 16:08:37
【问题描述】:

我们正在使用 spring 集成/spring 批处理作业在连接到公共 ActiveMQ 队列的多个 jboss 节点中运行作业。对于监听队列/通道的入站网关,我们已将自动启动配置为 false。自动启动的问题是,如果入站网关具有更多并发消费者属性,那么即使在需要这些消费者线程的作业频率非常少的情况下,在服务器启动期间启动的所有节点中也会有这么多数量的消费者线程处于活动状态。在这种情况下,春季批处理作业在 4 个节点之一中触发。我们可以在作业启动时利用控制总线启动入站网关组件,它适用于同一个JVM。但是在工作节点(运行在不同的 JVM)中,我们如何发送控制总线消息来启动入站网关组件,以便它们开始消费触发作业放置的消息?

【问题讨论】:

    标签: spring-batch spring-integration spring-integration-amqp


    【解决方案1】:

    控制总线只是一个从它的输入通道消费消息的端点。通道可以是内存中的通道,也可以是基于某些共享存储的分布式通道。例如,提到的 ActiveMQ 只是一个 JMS 供应商,因此您可以使用 JMS Inbound Endpoint 来使用来自 ActiveMQ 主题的命令消息并将其生成到该控制总线输入通道:https://docs.spring.io/spring-integration/docs/current/reference/html/jms.html#jms-message-driven-channel-adapter

    【讨论】:

    • 这正是我们尝试过的(即使用 ActiveMq 主题发送消息让控制总线在所有订阅者(4 个节点或 jvm)上启动入站网关)。但是想象一个情况,其中一个 VM 在处理后关闭,当它再次返回时,它不会启动其入站网关,直到从触发节点或 VM 接收到另一个主题消息。基本上在这种情况下,即使有 4 个服务器可用,我们也会使用 3 个 VM 运行。
    • 那么你需要一个持久订阅:activemq.apache.org/how-do-durable-queues-and-topics-work。在提到的 JMS 消息驱动端点上有这样一个选项。
    • 能够达到结果 1. 通过在入站网关上自动启动为 true (默认) 2. 通过将 max-concurrent-consumers 设置为更高的值,将 concurrent-consumers 保留为 1(默认) . 3. 作业完成后,向订阅者发送持久主题消息以停止入站网关,以便作业完成后释放所有消费者线程。
    • 我不确定这与原始问题有何关系,但很高兴看到您取得了进展。是时候考虑一​​下了:stackoverflow.com/help/someone-answers?
    • 太快点击提交按钮.. 你能检查我对解决方案的编辑回复吗?
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2015-09-29
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多