multithreading - Spring-integration/ActiveMQ 在单个线程中订阅多个目的地

标签 multithreading activemq spring-integration

我正在使用多个 <si:service-activator>的和 <jms:message-driven-channel-adapter>订阅多个队列和主题。来自每个目的地的消息都在一个单独的线程中接收,这意味着我的接收代码充满了锁来保护可变的内部状态。

我希望我的接收代码是无锁的。是否可以将 spring-integration/activemq 配置为从同一线程上的多个目的地接收?

如果这是不可能的,我可以想到两种选择:

  • 启动我自己的从阻塞队列中读取的处理线程,将所有收到的消息放在这个队列中。
  • 将所有收到的消息分派(dispatch)到一个目的地并从中消费。

  • 有人有更好的想法吗?

    最佳答案

    使用 wildcard pattern在一个队列上。
    也就是说,不要从两个队列中读取,而是使用一个队列并在名称中指定要读取的所有队列。
    即:"QUEUE.NR1,QUEUE.NR2""SOME.PREFIX.>"读取具有该前缀的所有队列。您的客户端代码将其作为单个队列处理。

    关于multithreading - Spring-integration/ActiveMQ 在单个线程中订阅多个目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30365908/

    相关文章:

    java - Spring 集成 Header Enricher 确实可以在链中工作

    python - 机器人 Controller 代码: Error when loading

    scala - 使用 Gatling 将消息发布到 ActiveMQ

    java - 使用 Foundation NSLock 在 JNI 中互斥

    java - 代理网络中的 ActiveMQ JMS 持久主题

    即使端口 61616 上没有运行,Activemq 也没有运行

    java - 如何根据配置动态创建多个jms消息驱动 channel 适配器

    statistics - Spring Integration channel 统计指标

    multithreading - 多线程读少写的高性能排序数据结构设计

    java - Java 7 中的获取或创建模式?