2011-10-14 183 views
0

我是比較新的JMS也碰到實現我第一次真正的應用程序一個奇怪的問題,我的任何幫助或建議desporateJMS消息

背景:我使用AtiveMQ(Java)作爲具有非事務處理,非實體隊列的消息代理。

設計:我有一個基於單個隊列的直接生產者/消費者系統。許多節點(當前爲2個)選擇器用於過濾節點收到的消息

問題:p roducer成功地將其項目放在隊列中(我已經使用Web界面驗證了它們在那裏),但是消費者仍然被阻止並且不讀取它們。只有當我關閉生產者中的JMS連接時,消費者纔會跳入生活並按預期消費這些消息。

這對我來說似乎很怪異,你肯定不應該完全掛斷生產者連接,讓消費者能夠從隊列中讀取。我一定在某個地方犯了一個錯誤(可能有會話),但目前可能出錯的事情數量很大,而且我不知道是什麼會導致這種行爲。

有關解決方案的任何提示,問題的原因或僅僅如何繼續調試將不勝感激。

感謝您的時間,

P.S如果requrie任何額外的信息,我很高興地提供它

回答

1

難沒有看到代碼說,但它聽起來像生產者交易。您不應該關閉生產者才能讓消費者收到消息,但在您致電提交之前,事務處理生產者不會發送消息。其他要檢查的事情是連接已經開始。同樣,如果你有很多消費者,你應該看預取設置,以確保一個消費者不消耗所有的消息,可能需要設置預取1,但很難說沒有進一步洞察你的用例。

+0

嗨蒂姆,謝謝你的迴應。作爲一個調試步驟,我試圖在每次生產者消息發送之後添加一個session.commit,以便在會話進行之前進行事務處理。這隻會導致「IllegalStateException:不是交易會話」,所以我不認爲這是問題。真正奇怪的行爲是我可以看到這些消息,甚至通過經紀人的網頁界面瀏覽它們。他們是他們的產品展示,他們的消費者只有在接近生產者連接時纔會接受:-( – PinkyNoBrain

+0

)最好的辦法是創建一個JUnit測試用例並將其發佈到ActiveMQ郵件列表或創建JIRA問題。 –