要解决ActiveMQ在服务器闲置几个小时后停止接收消息的问题,可以通过配置ActiveMQ的心跳检测来解决。下面是一个示例代码,演示如何配置ActiveMQ的心跳检测:
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.Connection;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
public class ActiveMQHeartbeatExample {
public static void main(String[] args) {
String brokerUrl = "tcp://localhost:61616";
String queueName = "exampleQueue";
try {
// 创建连接工厂
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl);
// 设置心跳检测间隔时间,默认为30秒
connectionFactory.setWatchTopicAdvisories(1000L * 60L * 5L); // 5分钟
// 创建连接
Connection connection = connectionFactory.createConnection();
// 启动连接
connection.start();
// 创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建队列
Queue queue = session.createQueue(queueName);
// 创建消息生产者
MessageProducer producer = session.createProducer(queue);
// 发送消息
producer.send(session.createTextMessage("Hello, ActiveMQ!"));
// 关闭资源
producer.close();
session.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
上述代码中,我们通过ActiveMQConnectionFactory
类设置了心跳检测间隔时间为5分钟(1000毫秒 * 60秒 * 5分钟),可以根据需要进行调整。这样配置后,ActiveMQ会在指定的间隔时间内发送心跳包,以保持连接的活跃状态,避免闲置后停止接收消息的问题。