Как поместить сообщение в Websphere MQ Queue из SQL Server sp? - PullRequest
4 голосов
/ 21 сентября 2011

Существует ли API для подключения к очереди Websphere MQ из хранимой процедуры SQL Server и помещения сообщения в очередь?

Если нет, то каким был бы лучший способ добиться этого?

Ответы [ 4 ]

3 голосов
/ 22 сентября 2011

Решением, которое я собираюсь использовать для этого, является написание хранимой процедуры 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-сервер в режиме привязок.

2 голосов
/ 26 апреля 2012

Существует гораздо более простое решение, чем это ... Проверьте это.

http://publib.boulder.ibm.com/infocenter/wmbhelp/v7r0m0/index.jsp?topic=%2Fcom.ibm.etools.mft.doc%2Fbc34040_.htm

0 голосов
/ 27 сентября 2011

Подход .NET CLR также был бы моим предложением.Мне было бы любопытно увидеть пример кода, я никогда не пробовал это раньше!Должен работать, я думаю.

0 голосов
/ 22 сентября 2011

Самый простой способ, который я могу придумать, - записать информацию в файл и затем использовать rfhutil для экспорта сообщения в очередь.Это потребует ручного вмешательства.Другой вариант - написать простое Java-приложение, используя JMS и JDBC.

...