【问题标题】:how to get connect with ibm websphere mq by using c#.net如何使用 c#.net 连接 ibm websphere mq
【发布时间】:2012-03-09 11:47:04
【问题描述】:

任何人都可以指导我,使用 c#.net 与 ibm websphere mq 连接,原因是我试图将消息推送到 MQ,请任何人给我建议使用 c#.net 连接

【问题讨论】:

    标签: c# ibm-mq


    【解决方案1】:

    已经转换(java 到 c#)mq-client - nuget, github

    c#示例:

    var ff = JmsFactoryFactory.getInstance(JmsConstants.__Fields.WMQ_PROVIDER);
    var cf = ff.createConnectionFactory();
    
    cf.setIntProperty(CommonConstants.__Fields.WMQ_CONNECTION_MODE, CommonConstants.__Fields.WMQ_CM_CLIENT);
    cf.setStringProperty(CommonConstants.__Fields.WMQ_HOST_NAME, "127.0.0.1");
    cf.setIntProperty(CommonConstants.__Fields.WMQ_PORT, 8010);
    cf.setStringProperty(CommonConstants.__Fields.WMQ_CHANNEL, "EXAMPLE.CHANNEL.ONE");
    cf.setStringProperty(CommonConstants.__Fields.WMQ_QUEUE_MANAGER, "EXAMPLE_QUEUE_MANAGER");
    cf.setStringProperty(CommonConstants.__Fields.WMQ_APPLICATIONNAME, "JMS EXAMPLE");
    cf.setStringProperty(CommonConstants.USERID, "EXAMPLE_USER");
    
    using (var context = cf.createContext())
    {
        var queue = context.createQueue("queue:///EXAMPLE_QUEUE_NAME");
        var producer = context.createProducer();
        producer.send(queue, "Hello World");
    }
    

    【讨论】:

    • IBM 已经在 Nuget 上提供了本机 .NET 和 XMS.NET,为什么还要使用这种不受支持的方法从 .NT 访问 IBM MQ Java 库?见:nuget.org/packages/IBMMQDotnetClient
    【解决方案2】:

    您可以使用 IBM 提供的 .NET 库进行连接;但是,它们要求您在部署解决方案的每台服务器上安装 WebSphere MQ 客户端。 (跛脚)

    如果使用 WebSphere MQ,则用于运行 XMS 应用程序的机器 必须与 WebSphere MQ Client V7.0.1.0 或更高版本一起安装

    您可以通过使用 IKVM (www.ikvm.net) 转换一些 Java 库来避免这种情况。

    整个过程只需 15 分钟

    您仍然需要在开发盒上下载并安装客户端,以便获取 JAR 文件。 转换后,您可以卸载客户端。

    这里是步骤

    1) 获取 JAR

    2) 转换 JAR

    • IKVM 下载:www.ikvm.net
    • 提取 IKVM 文件(例如 c:\tools\IKVM)
    • 打开 Win 命令提示符
      • 执行命令:set path=%path%;c:\tools\IKVM\bin
      • 执行命令:cd C:\Program Files (x86)\IBM\WebSphere MQ\java\lib
      • 执行命令:ikvmc -target:library -sharedclassloader { com.ibm.mq.jmqi.jar } { com.ibm.mqjms.jar } { dhbcore.jar } { jms.jar }

    3) 复制 JAR

    • 打开 Windows 资源管理器。
    • 导航到:C:\Program Files (x86)\IBM\WebSphere MQ\java\lib
    • 复制以下文件:
      • **com.ibm.mq.jmqi.dll
      • com.ibm.mqjms.dll
      • jms.dll**
    • 导航到:c:\tools\IKVM\bin
    • 复制以下文件:
      • **IKVM.Runtime.dll
      • IKVM.OpenJDK.Core.dll**
    • 将复制的文件移动到您的项目/解决方案中的第 3 方文件夹。

    4) 引用 JAR

    • 引用复制的 JAR。 请注意,如果您愿意,您可以跳过前面的复制 JAR 步骤,直接引用这些库。目的是表明正确执行不需要其他资源。

    以下是如何使用这些库的一个非常简单的示例。

    using com.ibm.msg.client.jms;
    using com.ibm.msg.client.wmq.common;
    using javax.jms;
    using System;
    
    class Program
    {
        static void Main(string[] args)
        {
            var ff = JmsFactoryFactory.getInstance(JmsConstants.__Fields.WMQ_PROVIDER);
            var cf = ff.createConnectionFactory() as JmsConnectionFactory;
    
            cf.setIntProperty(CommonConstants.__Fields.WMQ_CONNECTION_MODE, CommonConstants.__Fields.WMQ_CM_CLIENT);
            cf.setStringProperty(CommonConstants.__Fields.WMQ_HOST_NAME, "<YOUR INFO>");
            cf.setIntProperty(CommonConstants.__Fields.WMQ_PORT, 1414);
            cf.setStringProperty(CommonConstants.__Fields.WMQ_CHANNEL, "<YOUR INFO>");
            cf.setStringProperty(CommonConstants.__Fields.WMQ_QUEUE_MANAGER, "<YOUR INFO>");
    
            var connection = cf.createConnection();
            var session = connection.createSession(false, Session.__Fields.AUTO_ACKNOWLEDGE);
    
            var queue = session.createQueue("queue:///<YOUR INFO>");
            var producer = session.createProducer(queue);
    
            var msg = session.createTextMessage();
            msg.setStringProperty("JMSXGroupID", Guid.NewGuid().ToString());
            msg.setIntProperty("JMSXGroupSeq", 1);
            msg.setBooleanProperty("JMS_IBM_Last_Msg_In_Group", true);
            msg.setText("Hello World");
    
            connection.start();
            producer.send(msg);
    
            producer.close();
            session.close();
            connection.close();
        }
    }
    

    【讨论】:

    • 欣赏 IKVM 所做的工作。但是如果出现任何问题,IKVM 会提供支持吗?由于这不是来自 IBM,他们不会支持。如果在所有机器上安装整个客户端是唯一的问题,那么可以运行具有少量 MQ .NET 程序集的应用程序,并且不需要安装整个客户端。
    • 这只是一种替代方法,不需要安装 WebSphere MQ 客户端。也许 IBM 可以为 MQ 客户端创建一个 nuget 部署。
    • 感谢您的澄清
    【解决方案3】:

    MQ 产品安装附带了许多示例。请参阅 Nmqsput.cs 以了解您的情况。创建新项目时,您需要添加 amqmdnet.dll 作为参考。

    不确定您使用的是哪个版本的 MQ。我假设您使用的是 MQ v701。您可以在 MQ 安装的 tools 文件夹下找到示例。

    如果在 C# 中寻找 JMS 风格的消息传递,那么 XMS .NET 值得一看。您可以在与 MQ 示例相同的文件夹中找到 XMS .NET 示例。 XMS .NET 参考是here

    【讨论】:

      【解决方案4】:

      Windows 上有一个名为 amqmdnet.dll 的 IBM 提供的 dll(自 v5.3 Fixpack8 起),它是一个 .NET 程序集,为 MQSeries 提供 IBM 支持的模型。 (Reference) 通常位于C:\Program Files\IBM\WebSphere MQ\bin\amqmdnet.dll

      如果您需要更多指导,有几个关于如何从 CodeProject 上的 .NET 与 MQ 通信的示例:

      1. http://www.codeproject.com/Articles/12198/IBM-WebSphere-MQ-with-C-GUI-application-that-is-bo
      2. http://www.codeproject.com/Articles/37807/How-to-Setup-a-Websphere-MQ-with-C-NET-GUI-to-Put
      3. http://www.codeproject.com/Articles/6212/C-and-WebSphere-MQ-formerly-MQSeries-Client-Server

      此外,此演练可能会有所帮助:http://www.c-sharpcorner.com/UploadFile/pk_khuman/AquickstartCsharpWebsphereMQ07112006024017AM/AquickstartCsharpWebsphereMQ.aspx

      【讨论】:

      • sharpcorner 上的最后一个链接是最好的。
      • 上面提到的链接很少是很旧的。不知道最近图书馆有没有变化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多