如何将消息从 SQL Server sp 放入 Websphere MQ 队列?

发布于 2024-12-05 20:45:11 字数 91 浏览 4 评论 0原文

是否有 API 可以从 SQL Server 存储过程连接到 Websphere MQ 队列并将消息放入队列?

如果没有,实现这一目标的最佳方法是什么?

Is there an API to connect to a Websphere MQ queue from an SQL Server stored procedure and put a message onto a queue?

If not, what would be the best way to achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

醉梦枕江山 2024-12-12 20:45:11

我为此要使用的解决方案是编写一个 CLR 存储过程并将其部署到 SQL Server 上。

在 CLR 存储过程中,我将使用 MQ .NET API。

更新:我使用以下代码创建了一个存储过程:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using IBM.WMQ;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static int MQStoredProc(String queueManager, String queueName, String messageText)
    {
        //MQEnvironment.Hostname = "localhost";
        //MQEnvironment.Port = 1414;
        //MQEnvironment.Channel = "SYSTEM.DEF.SVRCONN";

        MQQueueManager mqQMgr = null;          // MQQueueManager instance
        MQQueue mqQueue = null;         // MQQueue instance

        try
        {
            mqQMgr = new MQQueueManager(queueManager);
            mqQueue = mqQMgr.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);   // open queue for output but not if MQM stopping

            if (messageText.Length > 0)
            {
                // put the next message to the queue
                MQMessage mqMsg = new MQMessage();
                mqMsg.WriteString(messageText);
                mqMsg.Format = MQC.MQFMT_STRING;
                MQPutMessageOptions mqPutMsgOpts = new MQPutMessageOptions();
                mqQueue.Put(mqMsg, mqPutMsgOpts);
            }

            return 0;
        }
        catch (MQException mqe)
        {
            return ((int)mqe.Reason);        
        }
        finally
        {
            if (mqQueue != null)
                mqQueue.Close();
            if (mqQMgr != null)
                mqQMgr.Disconnect();
        }
    }
};

这尚未准备好用于生产,但已在与 SQL 服务器处于绑定模式的同一服务器上运行的队列管理器上成功插入消息。

The solution I am going to use for this is to write a CLR stored procedure and deploy this onto SQL Server.

Inside the CLR stored proc I will use the MQ .NET api.

Update: I created a stored proc using the following code:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using IBM.WMQ;

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static int MQStoredProc(String queueManager, String queueName, String messageText)
    {
        //MQEnvironment.Hostname = "localhost";
        //MQEnvironment.Port = 1414;
        //MQEnvironment.Channel = "SYSTEM.DEF.SVRCONN";

        MQQueueManager mqQMgr = null;          // MQQueueManager instance
        MQQueue mqQueue = null;         // MQQueue instance

        try
        {
            mqQMgr = new MQQueueManager(queueManager);
            mqQueue = mqQMgr.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);   // open queue for output but not if MQM stopping

            if (messageText.Length > 0)
            {
                // put the next message to the queue
                MQMessage mqMsg = new MQMessage();
                mqMsg.WriteString(messageText);
                mqMsg.Format = MQC.MQFMT_STRING;
                MQPutMessageOptions mqPutMsgOpts = new MQPutMessageOptions();
                mqQueue.Put(mqMsg, mqPutMsgOpts);
            }

            return 0;
        }
        catch (MQException mqe)
        {
            return ((int)mqe.Reason);        
        }
        finally
        {
            if (mqQueue != null)
                mqQueue.Close();
            if (mqQMgr != null)
                mqQMgr.Disconnect();
        }
    }
};

This is not production ready but is inserting messages successfully on a queue manager running on the same server as the SQL server in bindings mode.

苏大泽ㄣ 2024-12-12 20:45:11

我能想到的最简单的方法是将信息写入文件,然后使用 rfhutil 将消息导出到队列中。这需要手动干预。另一种选择是使用 JMS 和 JDBC 编写一个简单的 Java 应用程序。

The simplest way I can think of is to, write the information on to a file and then use rfhutil to export the message onto queue. This would require manual intervention. The other option would be to write a simple java application using JMS and JDBC.

裂开嘴轻声笑有多痛 2024-12-12 20:45:11

.NET CLR 方法也是我的建议。我很想看看代码的示例,我以前从未尝试过!我想应该可以。

The .NET CLR approach would have been my suggestion, too. I'd be curious to see an example of the code, I've never tried that before! Should work I guess.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文