簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM