最近有用户报告称,使用ActiveMQ 5.16.1时,会发现消息在队列中卡住,无法处理。这可能是由于ActiveMQ使用的缓存未正确清除导致的。
解决此问题的方法是在send()调用中添加一个消息持久性标志,然后调用flush()方法以确保消息传递到代理。示例代码如下:
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class Producer {
public static void main(String[] args) {
try {
// Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// Create a Connection
Connection connection = connectionFactory.createConnection();
connection.start();
// Create a Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create a Destination (Queue or Topic)
Destination destination = session.createQueue("TEST.FOO");
// Create a MessageProducer from the Session to the Queue or Topic
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); // Add persistence flag to the message
TextMessage message = session.createTextMessage("Hello world!");
// Send the message
producer.send(message);
producer.flush(); // Ensure message is sent to broker
// Clean up
session.close();
connection.close();
} catch (Exception e) {
System.out.println("Caught: " + e);
e.printStackTrace();
}
}
}
请注意,将setDeliveryMode()方法的参数设置为'DeliveryMode.PERSISTENT”将消息设置为持久性。然后,调用flush()方法以确保消息传递到代理。