IBMMQDotnetClient 与 IBMXMSDotnetClient
IBMMQDotnetClient vs IBMXMSDotnetClient
我正在做一个项目,需要使用 c# 连接到 IBM MQ,并考虑哪个 NuGet 包是最好的。
但是,有2个NuGet包IBMMQDotnetClient和IBMMXMSDotnetClient,都是官方(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 之间有两个主要区别。
- IBMXMSDotnetClient 提供更多功能
- IBMXMSDotnetClient 提供类 JMS API。如果有人以前使用Java,将Java代码移植到.Net
会更容易
我注意到的另一个区别是它们连接到 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 条件以使用另一个条件
来消费消息,则必须重新创建消费者
我正在做一个项目,需要使用 c# 连接到 IBM MQ,并考虑哪个 NuGet 包是最好的。
但是,有2个NuGet包IBMMQDotnetClient和IBMMXMSDotnetClient,都是官方(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 之间有两个主要区别。
- IBMXMSDotnetClient 提供更多功能
- IBMXMSDotnetClient 提供类 JMS API。如果有人以前使用Java,将Java代码移植到.Net 会更容易
我注意到的另一个区别是它们连接到 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 条件以使用另一个条件
来消费消息,则必须重新创建消费者