【问题标题】:Is it possible to dispatch a message in the topic to only a certain queues while using virtual topic?是否可以在使用虚拟主题时将主题中的消息仅发送到特定队列?
【发布时间】:2013-10-14 18:11:02
【问题描述】:

发送到虚拟主题的消息将被分派到名为“Consumer.*.VirtualTopic.”的每个队列,这样的消息是否可能仅被分派到符合条件的特定队列,而不是所有的映射到虚拟主题的队列?

【问题讨论】:

    标签: activemq


    【解决方案1】:

    如果您预先知道只有一定数量的消费者/队列,您可以使用复合目的地而不是虚拟目的地,并使用 filteredDestination 块根据消息头做出路由决策。

    <destinationInterceptors>
      <virtualDestinationInterceptor>
        <virtualDestinations>
          <compositeQueue name="orders">
            <forwardTo>
              <filteredDestination selector="odd = 'yes'" queue="orders.odd"/>
              <queue physicalName="orders.accounting" />
              <queue physicalName="orders.warehouse" />
              <queue physicalName="orders.crm" />
            </forwardTo>
          </compositeQueue>
        </virtualDestinations>
      </virtualDestinationInterceptor>
    </destinationInterceptors>
    

    对于更复杂的路由决策,您应该考虑使用外部路由引擎,例如 Apache Camel。

    【讨论】:

    • 消费者可以在运行时添加到代理中,所以我猜复合目的地不是一种选择。我会改用骆驼。谢谢你帮助我。
    • 只是一个想法,你可以从侧面看问题。如果您只有一小组过滤器,请将消息发送到不同的虚拟目的地——每个目的地对应不同的过滤条件。
    猜你喜欢
    • 2023-03-16
    • 2023-02-26
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多