每次使用一条来自ActiveMQ的消息
我想这样做:每次使用一条来自ActiveMQ的消息,activemq,Activemq,我想这样做: ActiveMQ向客户端发送消息 客户端在处理消息后向ActiveMQ发送确认 如果客户端已关闭,或未确认该消息,则该消息将保留在队列中。所有其他消息将不会被传递 服务器一次发送一条消息,客户端一次处理一条消息。除非第一条消息已被确认,否则不会传递下一条消息 有什么方法可以做到这一点吗?听起来你想要的是一个低限或零限与客户端Ack或单个Ack的组合。预回迁为零将使您的客户机本质上是一个基于拉的消费者,如果您的客户机在断开连接时未能确认已发送的消息,则将ack设置为client将导致
有什么方法可以做到这一点吗?听起来你想要的是一个低限或零限与客户端Ack或单个Ack的组合。预回迁为零将使您的客户机本质上是一个基于拉的消费者,如果您的客户机在断开连接时未能确认已发送的消息,则将ack设置为client将导致代理重新传递消息 关于失败的缺点,activeMQ就是这样工作的 如果“失败/错误确认”发生在业务逻辑层,那么您应该使用 警告不是有效代码(pradigm) 关于消息限制和持久性,以下目标策略配置将为您提供帮助
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="true" memoryLimit="10mb">
<pendingSubscriberPolicy>
<vmCursor />
</pendingSubscriberPolicy>
</policyEntry>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="10mb">
<pendingQueuePolicy>
<vmQueueCursor/>
</pendingQueuePolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
我想我也会使用MySQL来实现这种持久性
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
</persistenceAdapter>
此外,我建议您根据自己的意愿配置 试试下面的方法
- 设置队列预取=0
- 使用交易确认
- 单线程消费者(concurrentConsumers=1/maxConcurrentConsumers=1,等等)
- 设置DispatchAsync=false
元素中的activemq.XML
。
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/>
</persistenceAdapter>