Jms ActiveMQ-是否可以在客户端确认模式下确认单个消息
据 客户端可以在消息被消费时单独确认消息,也可以选择将消息作为应用程序定义的组进行确认(通过对组的最后一条消息调用确认来完成,从而确认会话所消费的所有消息)Jms ActiveMQ-是否可以在客户端确认模式下确认单个消息,jms,activemq,Jms,Activemq,据 客户端可以在消息被消费时单独确认消息,也可以选择将消息作为应用程序定义的组进行确认(通过对组的最后一条消息调用确认来完成,从而确认会话所消费的所有消息) 如何在ActiveMQ中执行此操作?我无法让它工作。在马特·帕夫洛维奇发表以下评论后,我正在更正我的答案 客户端确认:使用此选项,客户端确认消息 通过调用消息的确认方法。确认已消费 消息自动确认接收到所有已发送的消息 已在本届会议上发言 因此,客户端确认选项不能用于向JMS提供程序发送单个消息的确认。 您可以在此处查看规范: 下面是Acti
如何在ActiveMQ中执行此操作?我无法让它工作。在马特·帕夫洛维奇发表以下评论后,我正在更正我的答案 客户端确认:使用此选项,客户端确认消息 通过调用消息的确认方法。确认已消费 消息自动确认接收到所有已发送的消息 已在本届会议上发言 因此,客户端确认选项不能用于向JMS提供程序发送单个消息的确认。 您可以在此处查看规范:
下面是ActiveMQ客户端的示例
import javax.jms.Connection;
import javax.jms.JMSException;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQMessageConsumer;
import org.apache.activemq.ActiveMQSession;
import org.apache.activemq.command.ActiveMQTextMessage;
public class SimpleConsumer {
public static void main(String[] args) throws JMSException {
Connection conn = null;
try {
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
conn = cf.createConnection("consumer", "consumer");
ActiveMQSession session = (ActiveMQSession) conn.createSession(false,
ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE);
ActiveMQMessageConsumer consumer = (ActiveMQMessageConsumer) session
.createConsumer(session.createQueue("QUEUE"));
conn.start();
ActiveMQTextMessage msg = null;
while ((msg = (ActiveMQTextMessage) consumer.receive()) != null) {
System.out.println("Received message is: " + msg.getText());
msg.acknowledge();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
}
}
谢谢你的回复,我犯了一个错误,因为Sun Java™ 系统消息队列是一个特定的实现。我正在寻找ActiveMQ中的等效项。不建议使用客户端。它是当前消息和所有以前的消息--包括可能在其他线程中运行的消费者正在传递的消息。我从未听说过这一点,您能提供此消息的参考吗?JMS API规范4.4.11。。。客户端确认-使用此选项,客户端通过调用消息的确认方法来确认消息。确认已使用的消息会自动确认其会话已发送的所有消息的接收。我正在寻找一种只确认单个消息的方法。因此ActiveMQSession.INDIVIDUAL_acknowledge就是这样。谢谢-我同时发现:)