我们使用 IBM MQ 作为具有多实例设置的消息传递层。使用 XMS 客户端(7.5 版)的 .NET 应用程序将从多个队列中读取消息。由于消息量很大,我为每个队列创建了大约 5 个连接来读取消息。并且有4个这样的队列。所以在应用程序中的任何时间点,都有 20 个连接和 20 个会话打开。使用此设置,我面临两个问题:
我经常在打开连接时遇到两个 XMS 异常。一个是 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)