是否有可能在生产者方面使用CLIENT_ACKNOWLEDGE? - JMS

时间:2012-09-21 10:50:27

标签: jms

是否可以在JMS的生产者端使用CLIENT_ACKNOWLEDGE?那是什么意思?我的意思是承认是消费者方面的事情。

1 个答案:

答案 0 :(得分:2)

不,消息确认纯粹是消费者方面的概念。创建JMS会话时,您可以选择多种确认模式。消息确认背后的想法与面向消息的中间件(MOM)中的保证传递概念有关。简而言之,当您通过MOM实现发送消息时,该消息将被持久化(由生产者),直到它被发送给消费者并且消费者确认其传递(或直到消息到期)。如果消费者在一段合理的时间内没有收到确认消息,则由生产者重新发送消息。每种模式都会以不同方式影响邮件传递。

在AUTO_ACKNOWLEDGE模式下,消费者通过会话收到的任何消息都将在接收时由JMS运行时的消费者自动确认。

在CLIENT_ACKNOWLEDGE模式下,必须明确确认消费者通过会话接收的每条消息。这意味着确认消息的责任落在应用程序而不是JMS运行时。通常,消费者需要在acknowledge()方法处理消息后调用会话上的onMessage()方法。

还有一个类似于AUTO_ACKNOWLEDGE的DUPS_OK_ACKNOWLEDGE设置,而是由JMS实现懒惰地发送确认,可能导致重复接收消息。

通常,当您需要明确控制消息确认时,您将使用CLIENT_ACKNOWLEDGE模式。