Destination高级特性

本文介绍ActiveMQ中组合队列CompositeDestinations、DeleteInactiveDestinations及虚拟主题VirtualTopics的功能与配置方法,帮助理解如何高效管理和使用队列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、组合队列 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");

 

转载于:https://www.cnblogs.com/xiaoliangup/p/9351695.html

HBase是一种分布式、可扩展的大数据存储系统,常用于处理大规模结构化和半结构化数据。以下是一些HBase的高级特性及其实验方法: ### 1. 过滤器(Filters) 过滤器用于在服务器端对数据进行过滤,减少数据传输量。常见的过滤器包括: - **RowFilter**:基于行键进行过滤。 - **QualifierFilter**:基于列名进行过滤。 - **ValueFilter**:基于单元格值进行过滤。 **实验方法**: ```python from hbase import HTable from hbase.ttypes import Scan, CompareFilter, RegexStringComparator # 连接到HBase表 table = HTable.Client('localhost', 'table_name') # 创建扫描器 scan = Scan() scan.filter = CompareFilter(compareOp=CompareFilter.CompareOp.EQUAL, comparator=RegexStringComparator('^row.*')) # 执行扫描 results = table.scan(scan) for row in results: print(row) ``` ### 2. 协处理器(Coprocessors) 协处理器允许在HBase服务器端执行自定义代码,类似于关系型数据库中的存储过程。协处理器分为两类: - **Observer Coprocessors**:类似于触发器,用于监听特定事件。 - **Endpoint Coprocessors**:类似于存储过程,用于执行自定义计算。 **实验方法**: ```python # Observer Coprocessor示例 from hbase import HTable from hbase.ttypes import Mutation class MyObserver: def prePut(self, region, row, mutations): print(f"Pre-put: {row}") # 连接到HBase表 table = HTable.Client('localhost', 'table_name') # 插入数据 mutation = Mutation(column='cf:qualifier', value='value') table.put(row='row_key', mutations=[mutation]) ``` ### 3. 批量操作(Batch Operations) 批量操作允许一次执行多个读写操作,提高性能。 **实验方法**: ```python from hbase import HTable from hbase.ttypes import Mutation # 连接到HBase表 table = HTable.Client('localhost', 'table_name') # 创建批量操作 batch = [] batch.append(('row1', [Mutation(column='cf:qualifier', value='value1')])) batch.append(('row2', [Mutation(column='cf:qualifier', value='value2')])) # 执行批量操作 table.batch(batch) ``` ### 4. 压缩(Compression) HBase支持对数据进行压缩,减少存储空间。常见的压缩算法包括GZIP、SNAPPY等。 **实验方法**: ```python # 在创建表时启用压缩 from hbase import HTable, HBaseAdmin from hbase.ttypes import ColumnFamilyDescriptor admin = HBaseAdmin.Client('localhost') table_name = 'compressed_table' column_family = 'cf' # 创建列族描述符并启用压缩 cfd = ColumnFamilyDescriptor(name=column_family, compression='GZIP') # 创建表 admin.createTable(table_name, [cfd]) ``` ### 5. 复制(Replication) HBase支持数据复制,将数据从一台集群复制到另一台集群,实现高可用性和灾难恢复。 **实验方法**: ```python # 在HBase配置文件中启用复制 # 编辑hbase-site.xml,添加以下配置 # <property> # <name>hbase.replication</name> # <value>true</value> # </property> # 在源集群中启用复制 from hbase import HBaseAdmin admin = HBaseAdmin.Client('source_cluster') admin.enableTableReplication('table_name', 'destination_cluster') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值