JMS API让我陷入精神崩溃的境地。轮询jms队列消息的正确方法是什么,并明确承认每条消息都已正确处理?
我应该创建一个"交易会话"哪种确认模式在上述场景中是正确的?
我的设计限制:
答案 0 :(得分:1)
JMS中有3种类型的消息确认类型:
DUPS_OK_ACKNOWLEDGE
- 自动但会话延迟确认消息,如果JMS提供程序失败,可能会导致重复消息。
AUTO_ACKNOWLEDGE
- 会话自动确认何时将消息传递给应用程序
CLIENT_ACKNOWLEDGE
- 客户端应用程序明确确认消息。
根据您的要求,我认为您可以选择CLIENT_ACKNOWLEDGE
,因为它允许您的应用程序明确确认消息。但是您必须注意,在某些JMS提供程序中,确认已使用消息会自动确认收到其会话已传递的所有消息。但是,一些JMS提供程序确实实现了每个消息确认。
您拥有的另一个选项是使用交易会话,其中确认模式无效。在事务会话中,仅当应用程序调用{{1}}时才会从队列中删除消息。如果会话调用commit
或在不调用rollback
的情况下结束,则自上次commit
调用以来传递到应用程序的所有邮件都将重新出现在队列中。