IBMMQDotnetClient 与 IBMXMSDotnetClient

IBMMQDotnetClient vs IBMXMSDotnetClient

我正在做一个项目,需要使用 c# 连接到 IBM MQ,并考虑哪个 NuGet 包是最好的。

但是,有2个NuGet包IBMMQDotnetClientIBMMXMSDotnetClient,都是官方(IBM)提供的。

阅读了一些参考资料后,

Difference between nuget packages IBMMQDotnetClient and IBMXMSDotnetClient (IBM MQ support for .Net Core)

https://www.ibm.com/support/pages/xms-net-%E2%80%93-overview

我觉得这两个 API 之间有两个主要区别。

  1. IBMXMSDotnetClient 提供更多功能
  2. IBMXMSDotnetClient 提供类 JMS API。如果有人以前使用Java,将Java代码移植到.Net
  3. 会更容易

我注意到的另一个区别是它们连接到 MQ 服务器的方式(QueueManager 与 Connection 和 Session)。但这不是真正的问题,据我所知只是不同的风格。

IBMMQDotnetClient

MQEnvironment.Hostname = hostName;
MQEnvironment.Channel = channel;
// Queue Manager object
MQQueueManager queueManager = new MQQueueManager(queueManagerName);
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
MQQueue system_default_local_queue = queueManager .AccessQueue(queueName, openOptions);

IBMXMSDotnetClient

XMSFactoryFactory factoryFactory;
IConnectionFactory cf;
IDestination destination;
factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_WMQ);
cf = factoryFactory.CreateConnectionFactory();
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, hostName);
cf.SetIntProperty(XMSC.WMQ_PORT, port);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, channel);
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
// Queue Manager just as an simple string property here
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, queueManagerName);

如果是这样,我看不出有什么理由不选择 IBMXMSDotnetClient.

但奇怪的是 IBMQDotnetClient 有 327K 次下载,而 IBMXMSDotnetClient.[=14= 只有 160k 次下载]

或者我错过了 IBMMQDotnetClient 的一些关键优势?

IBMMQDotNet 以 .NET 语言提供 MQ 本机 API,而 IBMXMSDotNet 以 .NET 提供 JMS 风格的 API。但是,这两个 API 之间存在一个主要区别:IBMXMSDotNet 提供异步消息使用者,而 IBMMQDotNet 不提供。异步消息消费是一种消费消息,只要消息到达 MQ 队列,IBMXMSDotNet 就会自动调用应用程序注册的回调方法。使用 IBMMQDotNet,您将需要执行同步 Get 调用(超时或不超时)以接收消息。

希望对您有所帮助

更新:2022 年 5 月 16 日 一个示例:在 MQDotNet 的情况下,您可以更改 selection 条件以读取与另一条件匹配的消息,而无需重新打开队列。例如,您可以首先从队列中说“select 消息匹配 groupId x”以读取与给定 groupId 匹配的消息。然后你可以从同一个队列说“select 消息匹配 groupId y”,而无需重新打开队列。在 XMSDotNet 的情况下,selection createria 在创建消费者时指定(它在内部打开 MQ 队列)。如果您想更改 selection 条件以使用另一个条件

来消费消息,则必须重新创建消费者