我們將IBM MQ用作具有多實例設置的消息傳遞層。使用XMS客戶端(版本7.5)的.NET應用程序將讀取來自多個隊列的消息。由於消息量很大,我爲每個隊列創建了大約5個連接來讀取消息。有4個這樣的隊列。因此,在任何時間點的應用程序中,有20個連接和20個會話都已打開。在此設置下,我面臨兩個問題:IBM MQ Connection上的最佳實踐和會話數
,我常常在兩個XMS例外,同時打開connections.One是MQRC_HOST_NOT_AVAILABLE((2538,X'9EA')到對話中分配到遠程系統的嘗試失敗)。另一個是MQRC_CONNECTION_BROKEN(連接到隊列管理器丟失。)
在關閉應用程序時,關閉所有會話和連接需要很多時間,因爲它們太多了。
所以我想減少連接的數量。通過爲每個隊列創建一個連接併爲每個隊列打開5個會話。這樣,連接數將減少到4(從20)。因此,上述兩個問題都將得到解決,我認爲(尚未嘗試)
所以想要知道的人分享他們的經驗,交流上述場景的最佳實踐。與每個連接的單個會話相比,如果我們爲每個連接打開多個會話,那麼傳遞郵件會有延遲嗎?
我正在使用的代碼如下:
private XMSFactoryFactory xMSFactoryFactory;
private IConnectionFactory connectionFactory;
private IConnection connectionWMQ;
private ISession sessionWMQ;
private IDestination destination;
private IMessageConsumer messageConsumer;
xMSFactoryFactory= XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
connectionFactory = _xMSFactoryFactory.CreateConnectionFactory();
// Set queue manager name, set server names, channel, use
// XMSC.WMQ_CM_CLIENT as WMQ_CONNECTION_MODE
connectionWMQ = _connectionFactory.CreateConnection();
sessionWMQ = _connectionWMQ.CreateSession(true, AcknowledgeMode.SessionTransacted);
destination = sessionWMQ.CreateQueue(_queueSettings.QueueName);
messageConsumer = sessionWMQ.CreateConsumer(_destination);
messageConsumer.MessageListener = new MessageListener(ProcessNewMessage)
您接受了Shashi的答案,這是否意味着您已經解決了問題?如果是這樣,您是否可以留下評論或更新您的問題,以表明該解決方案是爲了未來的Stack Overflow用戶的利益,而這些用戶的搜索將會發布此問答?謝謝! –