zoukankan      html  css  js  c++  java
  • Destination高级特性

    一、组合队列 Composite Destinations

    组合队列允许用一个虚拟的destination代表多个destinations。这样就可以通过composite destinations在一个操作中同时向多个queue发送消息

    客户端实现的方式

    在composite destinations中,多个destination之间采用“,”分割。例如:

    Queue queue = new ActiveMQQueue("FOO.A,FOO.B,FOO.C");

    如果你希望使用不同类型的destination,那么需要加上前缀如queue:// 或topic://,例如:

    Queue queue = new ActiveMQQueue("FOO.A,topic://NOTIFY.FOO.A");

     

    在xml配置实现的方式

    <destinationInterceptors>
      <virtualDestinationInterceptor>
        <virtualDestinations>
          <compositeQueue name="MY.QUEUE">
            <forwardTo>
              <queue physicalName="my-queue" />
              <queue physicalName="my-queue2" />
            </forwardTo>
          </compositeQueue>
        </virtualDestinations>
      </virtualDestinationInterceptor>
    </destinationInterceptors>

    避免在network连接broker中,出现重复消息

    <networkConnectors>
      <networkConnector uri="static://(tcp://localhost:61617)">
        <excludedDestinations>
          <queue physicalName="Consumer.*.VirtualTopic.>"/>
        </excludedDestinations>
      </networkConnector>
    </networkConnectors>

    二、Delete Inactive Destinations

    <broker xmlns="http://activemq.apache.org/schema/core" schedulePeriodForDestinationPurge="10000">
      <destinationPolicy>
        <policyMap>
          <policyEntries>
            <policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000"/>
          </policyEntries>
        </policyMap>
      </destinationPolicy>
    </broker>

    说明:
    schedulePeriodForDestinationPurge:设置多长时间检查一次,这里是10秒,默认为0
    inactiveTimoutBeforeGC:设置当Destination为空后,多长时间被删除,这里是30秒,默认为60
    gcInactiveDestinations: 设置删除掉不活动队列,默认为false

    三、虚拟主题 Virtual Topics

    为何使用虚拟主题

    • 同一应用内consumer端负载均衡的问题:也即是同一个应用上的一个持久订阅不能使用多个consumer来共同承担消息处理功能。因为每个consumer都会获取所有消息。
    • 同一应用内consumer端failover的问题:由于只能使用单个的持久订阅者,如果这个订阅者出错,则应用就无法处理消息了,系统的健壮性不高
    //发送端 创建虚拟主题
    Topic destination = session.createTopic("VirtualTopic.Orders"); //接收端 不同的前缀作为队列的名称,即可表明自己的身份即可实现消费端应用分组。 Destination destination = session.createQueue("Consumer.A.VirtualTopic.Orders");
  • 相关阅读:
    解决一道leetcode算法题的曲折过程及引发的思考
    算法研究:一维多项式求值(秦九韶算法)
    通过HWND获得CWnd指针
    将标题空格替换为 '_' , 并自动复制到剪切板上
    稀疏矩阵操作算法
    微信好友分析之展示好友信息
    微信好友分析之获取好友信息
    爬取当当网的图书信息之结尾
    爬取当当网的图书信息之封装一个工具类
    爬取当当网的图书信息之实体设计
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/9351695.html
Copyright © 2011-2022 走看看