1

javax.jms.Connection#start()真正是为了什么。根据javadoc,它说:

开始(或重新启动)连接传递传入消息。

但这究竟意味着什么?我想这取决于实现,那么它在 IBM MQ(最新 8+)中意味着什么?也许在该客户端连接之后会预先缓存服务器消息?我检查了一些生产者的例子,他们正在调用 start 方法,但从未阅读过消息。我在没有调用 start() 的情况下测试了代码,它工作正常(发送,而不是接收)。

我只是想了解 MQ 可能比需要的更多,但我仍然想知道。也许它在其他 JMS 实现中是如何完成的?像 Tibco、Apache MQ?也许有人知道?

4

2 回答 2

4

正如文档中提到的那样,Connection.start 方法开始将消息从消息传递提供者(在本例中为 MQ)传递到应用程序。如果不调用 Connection.start,消费者将无法接收消息。

发送消息不需要connection.start。查看 MQ 附带的 JmsConsumer.java 示例。它调用connection.start。您可以发布无需调用 connection.start 即可接收消息的示例代码吗?

于 2014-09-26T06:51:31.027 回答
1

正如沙希所说。如果您在调用 connection.start()之前有一个消息使用者和一个呼叫接收,那么您将收到任何消息。启动连接,您将收到消息。

同样,如果您设置了消息侦听器,则在调用 connection.start() 之前它不会开始获取任何消息。

在这两种情况下,即使消息在队列中,也不会收到任何内容,直到调用 connection.start()。

就内部而言 - 是否有一些你无法解释的行为?你能澄清一下吗。

JMS2.0 上下文是自动启动的,因此如果您使用新的 API 调用来启动不是必需的。

于 2014-09-26T06:52:19.987 回答