![](/img/trans.png)
[英]DefaultMessageListenerContainer not working with Websphere MQ
[英]Websphere MQ asynchronous put not working
我們有一個使用Websphere MQ 7.0.1版的應用程序。 服務器在Linux上,客戶端應用程序在Windows 7上運行,並使用Java的MQ類用Java編寫。 客戶端和服務器之間的隊列之一專門用於客戶端和服務器之間的keepalive協議。 出於多種原因,我們不需要進行討論,這對於維護與MQ服務器只是一部分的“真實后端”的連接是必要的。
Keepalive協議可以正常工作,除非其中一台服務器發生故障,並且客戶端需要在該服務器可用時重新連接。 然后我們有問題。
我們已經決定我們的keepalive協議的實現太復雜了。 客戶端僅需要定期將這些Keepalive消息發送到服務器,而無需關心它們是否到達服務器。 如果沒有,服務器將采取
適當的行動。
因此,異步放置建議自己。 我們實現它的第一個嘗試如下:
由此:
MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults
QueueKL.put(mqMessage,pmo);
對此:
MQPutMessageOptions pmo = new MQPutMessageOptions();
pmo.options |= CMQC.MQPMO_ASYNC_RESPONSE;
QueueKL.put(mqMessage,pmo);
結果令人不快。 put調用不會立即返回,而不會立即返回,調用它的線程也永遠不會顯示出新的生命跡象。
當然,此調用是在try-catch塊中啟動的,並且我們已盡力嘗試捕獲所有可能拋出的Throwable,例如catch (Throwable t)
並記錄它。 沒有任何記錄。 此時線程似乎被阻塞了,這與我預期發生的情況完全相反。
我必須在實現這一目標方面缺少一些關鍵
調用(在Queue或QueueManager中是否需要一些特殊的設置?IBM文檔在這里越來越稀疏了),但我不知道那是什么。 請幫助我深入淺出。
這有幫助嗎? 您是否不幸處於7.0.1.8?
http://www-01.ibm.com/support/docview.wss?uid=swg1IC85084
“此問題還影響Java的WebSphere MQ類的用戶,這些用戶正在將消息放入WebSphere MQ隊列中,該隊列在PUT消息選項(MQPMO)結構中指定了MQPMO_ASYNC_RESPONSE。”
嘗試確保客戶端的版本為7.0.1.9或7.1.0.2或更高
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.