Jan*_*nek 4 activemq-classic jms message-queue
据我了解(http://activemq.apache.org/message-redelivery-and-dlq-handling.html)重新交付可以由消费者或经纪人完成。不过我有一些问题:
消费者的重新交付如何在下面工作?消费者是否缓存来自代理的消息并在本地重新传递?如果消费者在中间终止会发生什么?这样的消息会丢失吗?我认为,只要消费者不承认该消息,就不应该如此。但是在这种情况下,消息在代理上仍然可用吗?
何时使用代理与消费者重新交付有任何指导方针吗?有什么建议吗?
消费者在本地缓存并重新发送消息到客户端,直到满足重新发送计数,然后自动确认消息为坏消息(posin ack)。消费者可以根据确认模式控制是否将其标记为重新交付。如果由于某种原因消费者不能或不想处理消息,它也可以将它踢回去,如果它关闭会话,它将再次可供消费。
代理将保留该消息,直到收到消费者的确认。如果您的使用者设置为 AUTO_ACKNOWLEDGE,那么如果发生未处理的异常或使用者意外结束,您可能会丢失消息。
否则,如果您的消费者正在使用事务或 CLIENT_ACKNOWLEDGE,它将让您控制何时发生。
对于事务,如果消费者在提交之前下降,则下一个消费者或该消费者重新连接时都可以使用它。
我一直在 CLIENT_ACKNOWLEDGE 上使用事务,所以我不想肯定地说如果在消费者关闭之前没有调用 Session.recover() ,消息将会丢失。
从消费者的角度来看,这也称为重试逻辑。
关于代理与消费者重新传递:默认情况下,代理只会不断向消费者提供相同的消息,直到达到重新传递计数为止。如果您告诉代理在给定的时间后不要重新传递它,那么您的使用者就可以使用其他可以处理的消息。
何时执行此操作实际上取决于您的应用程序中发生的情况。也许需要将特定消息放入数据库,而该数据库目前不可用,您想继续处理去其他地方/有其他目的的消息?
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |