5.6在代理中为消费者缓存消息

虽然消息持久化中一个最重要的方面是消息会存活于长期的存储,有一定数量的案例里消息被要求为在消费者与代理断开连接时可用,但是在数据库中持久化消息太慢。交易平台的实时价格信息传输是一个好例子。但是实时数据应用使用的消息仅在很小一段时间内有效,经常小于一分钟。所以将消息持久化并存活于系统外存中是没有意义的,因为新的消息会很快到达。
ActiveMQ通过使用某种称为subscription recovery policy的东西在代理中使用消息缓存为这些类型的系统支持消息的缓存。这种配置方针配用来判断哪种类型的消息应该被缓存,缓存多少和多久。在该节的剩下内容我们将揭示在ActiveMQ中的消息缓存如何工作和如何配置不同类型的可用的订阅恢复政策(subscription recovery policies)。
5.6.为消费者的消息caching是如何工作的
ActiveMQ消息代理为每一个使用到的topi cache 消息。唯一不被支持的topic类型是temporary topic和ActiveMQ advisory topic。这种方式cache消息不实为队列处理的,因为一般的队列操作持有每个发送到它的消息。
被代理cashe的消息仅到主题消费者是retroactive才被分派给它,从不给持久消息订阅者。
topic消费者通过在destination上设置的一个属性来标记为retroactive。这里有个例子:

public void createRetroactiveConsumer() throws JMSException{
ConnectionFactory fac = new ActiveMQConnectionFactory();
Connection connection = fac.createConnection();
connection.start();
Session session =
connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Topic topic =
session.createTopic("TEST.TOPIC?consumer.retroactive=true");//Mark consumerto be retroactiv
MessageConsumer consumer = session.createConsumer(topic);
}

在代理那边,消息caching被一个称为subscriptionRecoveryPolicy的destination policy控制。在代理中使用的默认的订阅恢复政策是FixedSizeSubscriptionRecoveryPolicy.让我们看看不同地可用的订阅恢复政策。
5.6.2ActiveMQ订阅恢复政策
有许多不同地政策允许调整持久化和消息的类型,这些类型的消息为非持久主题消费者cache。每种政策将被论述。
[b]ActiveMQ 固定大小订阅恢复政策[/b]
基于这种政策使用的memory的大小,它们将之了为topic缓存消息的数量。你可以选择对所有的topic应用cache限制,或者基于topic-by-topic。有效地属性见表5.6
Table 5.6 Configuration proper ties for a fixed size subscription recovery policy
[table]
|属性名|默认值|描述|
|maximumSize|6553600|以字节为单位的这个cache的memory大小|
|useSharedBuffer|true|若为true,被分配的memory大小被所有topic共用|
[/table]
[b]ActiveMQ固定数量订阅恢复政策[/b]
这种政策基于一个静态数限制根据topic cache的消息的数量。只有一个属性可用,如5.7表中:
Table 5.7 Configuration proper ties for a fixed count subscription recovery policy
[table]
|属性名|默认值|描述|
|maximumSize|100|允许存于topic cacje中的消息数量|
[/table]
[b]ActiveMQ QUERY-BASED订阅恢复政策[/b]
这种政策基于一个应用到每个消息的JMS属性选择器限制cache的消息的数量。仅一个属性可用,如5.8表:
Table 5.8 Configuration proper ties for a query-based subscription recovery policy:
[table]
|属性名|默认值|描述|
|query|null|仅cache符合这个query的消息|
[/table]
[b]ActiveMQ时控订阅恢复政策[/b]
这种政策基于一个应用到每个消息的超时设置限制cache的消息的数量。注意消息上的超时设置与消息Producer设置的timeToLive相独立。如5.8表:
|属性名|默认值|描述|
|recoveryDuration|60000|以毫秒为单位的保存消息于cache的时间|
[/table]
[b]ActiveMQ LAST IMAGE 订阅恢复政策[/b]
该政策只持有最后一个发送到topic的消息。它对实时价格信息有用--每个topic的价格被使用,你可能只想要发送到topic的最后一个价格。该政策没有可配置属性。
5.6.3配置订阅恢复政策
在ActiveMQ代理配置中,你能为单独的topic配置subscriptionRecoveryPolicy,抑或你能使用wildcards(通配符)。一个配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<broker brokerName="test-broker"
persistent="true"
useShutdownHook="false"
deleteAllMessagesOnStartup="true"
xmlns="http://activemq.apache.org/schema/core">
<transportConnectors>
<transportConnector uri="tcp://localhost:61635"/>
</transportConnectors>
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic="Topic.FixedSizedSubs.>">
<subscriptionRecoveryPolicy>
<fixedSizeSubscriptionRecoveryPolicy maximumSize="2000000"
useSharedBuffer="false"/>
</subscriptionRecoveryPolicy>
</policyEntry>
<!-- Last image recovery for Topic.LastImageSubs.-->
<policyEntry topic="Topic.LastImageSubs.>">
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
<policyEntry topic="Topic.NoSubs.>">
<subscriptionRecoveryPolicy>
<noSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
</policyEntry>
<!--Time limited recovery policy for Topic.TimedSubs.-->
<policyEntry topic="Topic.TimedSubs.>">
<subscriptionRecoveryPolicy>
<timedSubscriptionRecoveryPolicy recoverDuration="25000"/>
</subscriptionRecoveryPolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
</broker>
</beans>
5.7总结
该中从讨论消息如何为queue和topic被不同地存储开始。接着许多消息存储实现被解释和讨论。包括它们的配置和何时去使用。你应该对在ActiveMQ中使用的基于文件的用两种消息仓库有一个不错的了解了--AMQ消息仓库和KahaDB消息仓库--和它们的在性能和可扩展性的权衡。我们也讨论了JDBC消息仓库,如果你想要使用一个已存在的关系数据库和ActiveMQ内存消息仓库,它是一个不错的选择。
最后我们导论了一个特殊的case。它为非持久主题消息在代理中存储消息。这一节讨论了为什么cache是必要的和何时使用它有意义,以及在配置消息cache中ActiveMQ提供的灵活性。
在下一章我们将看看ActiveMQ的用户授权和如何使用authorization来 restrict access to destinations.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值