ActiveMQ之消息分发策略
分发策略queue的分发策略可插拔的分发策略只适用于topic。queue的分发策略比较固定:轮询(默认)或按照严格顺序。同时我们也应该了解prefect的意义。 ActiveMQ的prefetch缺省参数是针对处理大量消息时的高性能和高吞吐量而设置的,因此默认的prefect值很大,默认的分发策略 ...
Read more
ActiveMQ之订阅恢复策略
简介生产者在某个topic发送了多条消息后,这个时候非持久订阅者才订阅,那么它是不能获取之前生产者发送的信息的。或者,由于网络问题,非持久类型的消费者处于非活跃状态,无法接收到生产者发送的消息。使用消息恢复策略,可以解决上面的问题。ActiveMQ目前支持一个定时或固定大小的恢复缓冲区,在你连接到b ...
Read more
ActiveMQ之Prefect机制
简介ActiveMQ的设计目标是成为一个高性能的消息总线。这意味着使用SEDA架构可以异步执行尽可能多的工作。 为了有效利用网络资源,Broker利用“推送”模型向消费者发送消息。 这可确保消费者始终拥有准备处理的消息的本地缓冲区。 替代方案是让消费者明确地从Broker那里提取消息。 单独提取消息 ...
Read more
ActiveMQ之慢消费者处理
简介慢消费者在非持久性主题上会出现问题,因为它们会强制broker为它们在内存保留旧消息。一旦填满,就会导致broker放慢生产者的速度,导致快的消费者也会变慢。 目前,有一个策略可以让你配置broker除了prefect bufer之外还将为消费者保留的最大匹配的消息数。在达到此最大值后,当新消息 ...
Read more
ActiveMQ之定期清理离线的持久订阅者
概述通常,我们不希望系统中存在长时间离线的持久订阅者,因为Broker需要为它们保留它们订阅的topic的所有消息。而且随着时间的推移,将会导致达到存储限制,从而导致系统变慢。 当然,你可以通过JConsole或Web Console等管理工具来手动取消不活跃的持久订阅者。但显然可以餐区更多措施来帮 ...
Read more
ActiveMQ的消息重发与死信处理
概述在发生以下情形时,消息会给重发给客户端: 使用了一个事务性的会话且调用了rollback()方法。 在调用commit()方法前一个事务性的会话被关闭了。 一个会话使用CLIENT_ACKNOWLEDGE的ACK模式,且调用了Session.recover()方法。 一个客户端连接超时(可能正 ...
Read more
ActiveMQ常见问题
1.服务挂掉 设置mq的storeUsage为1M,生产者不断发送持久化消息,消费者每隔5秒接收1条消息。在达到配置的使用限制后,broker会停止producer。此时生产者阻塞,但消费者可正常连接并消费消息,等消息消费掉一部分,文件删除又腾出空间之后,生产者又可继续发送消息,服务自动恢复正常。a ...
Read more
ActiveMQ之消息选择器(Message Selectors)
JMS Selectors用在获取消息的时候,可以基于消息属性和Xpath语法对消息进行过滤。JMS Selectors由SQL92语义定义。以下是个Selectors的例子:1consumer = session.createConsumer(destination, "JMSType = 'ca ...
Read more
ActiveMQ请求回复

JMS支持Request/Reply模式,在消息生产者发送消息时设置回复消息的目的地,在Consumer接收到消息后,可以回复消息。

Read more
ActiveMQ顺序消费消息+消息分组

简介

Queue中的消息是按照顺序发送给Consumers的。然而,当你有多个Consumer同时从相同的Queue提取消息时,顺序将不能得到保证。因为这些消息时被多个线程并发的处理。但是,有时候保证消息的顺序是很重要的。例如,你可能不希望插入订单操作结束之前执行更新订单的操作。那么我们可以通过Exclusive Consumer和Message Groups来实现这一目的。

独有消费者

从ActiveMQ4.X版本开始支持ExclusiveConsumer(或者说是Exclusive Queues)。Broker会从多个Consumer中挑选一个Consumer来处理所有的消息,从而保证消息的有序处理。如果这个Consumer失效,那么Broker会自动切换到其他的Consumer。

Read more