在IBM MQ客户端传递的id(Passing ids in IBM MQ client)

2019-10-17 22:43发布

我读了一个队列中的消息到另一个队列。 但是我的相关IDS不会保留。

如果相关ID是“ABC12345”在导入队列中的消息,当我把它放到出口队列,相关id的值是不同的。

如何保持相同相关性id的2个队列之间,总是有一个唯一的消息ID?

得到:

mqQueue.Get(mqMsg);
string messageID = Convert.ToString(mqMsg.MessageId);
string correlationID = Convert.ToString(mqMsg.CorrelationId);

例如,如果如果相关ID为“000123456789”,然后读取后,而把它回,值被改变了相同的消息。

放:

 mqMsg.CorrelationId = System.Text.Encoding.UTF8.GetBytes(correlationID);
 mqQueue.Put(mqMsg, mqPutMsgOpts);

我使用的MQ PUT和GET通过MQ.NET类选项。

Answer 1:

下面的代码片段保留相关ID的,当我把消息发送到另一个队列。 在我的示例我做到以下几点:

1)把一个消息发送到importQ具有独特的相关性ID。
2)获得从该消息importQ
3)将所接收的消息来exportQ

    public static void preserveCorreLid()
    {
        Hashtable mqProps = new Hashtable();
        MQQueueManager qm = null;
        String strCorrelId = "00123456789";

        try
        {
            mqProps.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
            mqProps.Add(MQC.CHANNEL_PROPERTY, "NET.CLIENT.CHL");
            mqProps.Add(MQC.HOST_NAME_PROPERTY, "localhost");
            mqProps.Add(MQC.PORT_PROPERTY, 2099);

            qm = new MQQueueManager("QM", mqProps);

            MQQueue importQ = qm.AccessQueue("IMPORTQ", MQC.MQOO_INPUT_SHARED |MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING );

            MQMessage mqPutMsg = new MQMessage();
            mqPutMsg.WriteString("This is an import message");
            mqPutMsg.CorrelationId = System.Text.Encoding.UTF8.GetBytes(strCorrelId);
            MQPutMessageOptions mqpmo = new MQPutMessageOptions();
            importQ.Put(mqPutMsg,mqpmo);

            MQMessage respMsg = new MQMessage();
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.WaitInterval = 3000;
            gmo.Options = MQC.MQGMO_WAIT;

            try
            {
                importQ.Get(respMsg, gmo);
            }
            catch (MQException ex)
            {
                Console.Write(ex);

                Console.WriteLine("Queue Name : " + importQ.Name + ":");
            }
            importQ.Close();

            MQQueue exportQ = qm.AccessQueue("EXPORTQ", MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING);
            exportQ.Put(respMsg);
            exportQ.Close();
            qm.Disconnect();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
    }


Answer 2:

这行代码让我相关ID

  correlationID = System.Text.Encoding.UTF8.GetString(mqMsg.CorrelationId);


文章来源: Passing ids in IBM MQ client
标签: c# .net ibm-mq