创建连接,然后创建一个会话,然后从队列中获取一定数量的消息。
public class Consumer {
public static void main(String[] args) throws JMSException {
Consumer consumer = new Consumer(); // creates a connection and session
Destination destination = consumer.getSession().createQueue("JOBS");
MessageConsumer messageConsumer = consumer.getSession().createConsumer(destination);
messageConsumer.setMessageListener(new Listener(job)); // asynchronous listener.
consumer.close(); // closes the connection
}
}
何时以及如何关闭连接?因为当我按上述方式执行时,只读取一条消息! 如果我没有如上所述关闭连接,则会读取所有消息,因此可以,但连接保持打开状态。
答案 0 :(得分:0)
由您来决定何时关闭连接。
您可以在关闭前添加Thread.sleep或添加 shutdownHook 以在卡纸停止时关闭:
Thread shutdownHook = new Thread(new Runnable() {
@Override
public void run() {
consumer.close();
}
});
Runtime.getRuntime().addShutdownHook(shutdownHook);
另一种方法:
最大不活动持续时间(在考虑套接字之前) 死的)以毫秒为单位。在某些平台上,它可能需要很长时间才能完成 套接字似乎死了,所以我们允许代理终止连接 他们在一段时间内没有活动。一些运输使用 启用保持心跳功能。设置为值<= 0以禁用 不活动监控。
您可以使用wireFormat.maxInactivityDuration指定连接的最大不活动持续时间,为此,当您使用MQ代理创建连接时,您应该创建这样的
cf = new ActiveMQConnectionFactory(
"tcp://localhost:61616?wireFormat=openwire&wireFormat.maxInactivityDuration=value");
阅读此ActiveMQ文档以获取更多详细信息http://activemq.apache.org/cms/configuring.html