【问题标题】:JMS Connection - start method (IBM MQ impl)JMS 连接 - 启动方法 (IBM MQ impl)
【发布时间】:2014-09-27 01:35:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java jms ibm-mq tibco-ems


    【解决方案1】:

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

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

    【讨论】:

    • 没有开始的代码用于发送消息。我只是想知道只发送消息时是否需要调用 start 。 (因为 IBM 示例调用 start 甚至只是为了发送)
    • 例子的好点;很容易忘记开始的调用,我们倾向于一直添加它!也许需要额外的评论。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 所以它只是用于接收,不需要发送,谢谢。
    猜你喜欢
    • 2019-05-07
    • 2023-03-05
    • 2019-12-31
    • 1970-01-01
    • 2020-04-23
    • 2015-04-08
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多