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");
  • 相关阅读:
    new JSONObject()报空指针异常
    转:修改Fckeditor 2.6 增加插入Mp3等多媒体文件功能
    执行更新操作时,timestamp类型的字段自动被更新为了系统当前日期
    读取某个文件的位置
    myeclipse配置注释
    为eclipse 的 hibernate 配置文件加提示
    hibernate3与hibernate4
    查看eclipse版本
    Eclipse编译没有class文件生成
    严重: Error loading WebappClassLoader context:
  • 原文地址:https://www.cnblogs.com/xiaoliangup/p/9351695.html
Copyright © 2011-2022 走看看