是什么?
activemq是apache开源的消息中间件,遵从jms1.1规范
2种模式:
p2p pub/sub 即:点对点模式和发布订阅模式
点对点模式:即通过queue实现,发布订阅模式:通过topic实现
这里用文字来表示一下消息的生产和消费过程:
生产------>判断发送窗口是否有空间,有,判断是采用同步还是异步发送—结束
没有----等待被唤醒
消费者:分2种情况,如果是采用recive方式
通过通信层sokect把消息同步到unconsumerMessage队列中(prefetchSize确认同步条数),然后一条一条消费,返回ack确认机制
如果是采用listener方式
broker把消息同步到delivered队列,消费消息,返回ack
通信分类:
事务性会话和非事务性会话
事务性会话的ack确认机制是在commit之前的所有操作一次提交的,即:在commit之前的所有操作均未提交ack
非事务性会话:
4种ack确认机制:
Session.AUTO_ACKNOWLEDGE 自动提交方式(非事务性)
Session.CLIENT_ACKNOWLEDGE;(客户端自己确认,必须要调用message.ack)
Session.DUPS_OK_ACKNOWLEDGE(延迟确认,批量确认)
Session.SESSION_TRANSACTED
消息重发机制:
在事务性会话中,在调用commit之前如果客户端或者broker挂掉,或者客户端调用rollback
在非事务性会话中,ack确认方式采用client_acknowledge,如果未调用,或者调用recover,均会导致消息重发
死信队列:
如果重发次数超过配置,缺省是6次,会把该消息放入死信队列
2个调优参数:
prefetchSize取数大小,optimizeAcknowledge是否开启批量确认开关