Session.AUTO_ACKNOWLEDGE
程序员文章站
2022-05-03 23:50:33
...
使用自动确认模式,必须要创建无事务session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
AUTO_ACKNOWLEDGE:自动确认模式,一旦接收方应用程序的消息处理回调函数返回,会话对象就会确认消息的接收。 一般接收方的做法是调用consumer.setMessageListener()注册消息处理函数。如果该函数返回,代表着一条消息被接受放成功接收, ActiveMQ服务器会认为消息接收成功。函数的返回可以是正常的返回,也可以是因为抛出异常而结束。
接收方代码,多次允许的时候,每次都会接收到1个消息。这是因为消息处理函数没有返回,ActiveMQ会认为消息接收失败。
String url = "tcp://localhost:61616";
String userName = "system";
String password = "manager";
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName, password, url);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
Destination destination = session.createQueue("test_queue");
MessageConsumer consumer = session.createConsumer(destination);
// 消息消费者接收消息
consumer.setMessageListener(new MessageListener()
{
@Override
public void onMessage(Message msg)
{
TextMessage message = (TextMessage) msg;
try
{
System.out.println("收到消息:" + message.getText());
while(true)
{
//throw new JmsException("error return");
}
}
catch (JMSException e)
{
e.printStackTrace();
}
}
});