如何从SQL Server sp在Websphere MQ Queue上放置消息?

时间:2011-09-21 12:26:26

标签: sql-server ibm-mq

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

如果没有,那么实现这一目标的最佳途径是什么?

4 个答案:

答案 0 :(得分:3)

我将使用的解决方案是编写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服务器在同一服务器上运行的队列管理器上成功插入消息。

答案 1 :(得分:2)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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