2014-09-26 134 views
1

什麼是javax.jms.Connection#start()真的是。根據javadoc它說:JMS連接 - 啓動方法(IBM MQ impl)

開始(或重新啓動)連接的傳入消息傳遞。

但這到底意味着什麼?我想這取決於實現,因此它在IBM MQ(最新8+)中意味着什麼?也許之後,客戶端連接將預先緩存服務器消息? 我檢查了生產者的examples,他們正在調用start方法,但從來沒有讀過消息。我測試的代碼沒有調用start(),它工作正常(發送,不接收)。

我只是想明白MQ可能比需要的更引擎蓋下,但我仍然想知道。也許它也是如何在其他JMS實現中完成的?像Tibco,Apache MQ?也許有人知道?

回答

4

與文檔中提到的一樣,Connection.start方法開始從消息傳遞提供者(在本例中爲MQ)嚮應用程序傳遞消息。消費者不能在不調用Connection.start的情況下接收消息。

發送消息時不需要connection.start。查看MQ附帶的JmsConsumer.java示例。它調用connection.start。你可以發佈你的示例代碼,而不用調用connection.start來接收消息嗎?

+0

沒有開始的代碼被用於發送消息。我只是想知道是否需要在發送消息時調用start。 (導致IBM示例調用開始,即使僅用於發送) – JIV 2014-09-26 06:54:25

+0

示例上的優點;很容易忘記開始的呼叫,我們往往只是一直添加它!也許需要額外的評論。 – Calanais 2014-09-26 08:24:02

1

正如沙市所說。如果你有一個消息使用者和一個呼叫接收之前調用connection.start()你會收到任何消息。開始連接,你會得到消息。

同樣,如果你有一個消息監聽器設置,它將不會開始得到任何消息,直到connection.start()被調用。

在這兩種情況下都不會收到任何消息,即使消息在隊列中,直到調用connection.start()。

就內部而言 - 您是否看到過一些您無法解釋的行爲?你能澄清一下嗎?

JMS2.0上下文是自動啓動的,所以如果你使用新的API調用來啓動並不是必需的。

+0

所以它只是爲了接收,不需要發送,Thx。 – JIV 2014-09-26 06:56:41