【问题标题】:Passing ids in IBM MQ client在 IBM MQ 客户端中传递 ID
【发布时间】:2018-07-10 08:37:01
【问题描述】:

我将消息从一个队列读取到另一个队列。但是我的相关 ID 没有保留。

如果导入队列中的消息的关联ID为“ABC12345”,当我将其放入导出队列时,关联ID的值是不同的。

我如何在 2 个队列之间保持相同的关联 ID 并始终 有唯一的消息 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.NET 类使用 MQ PUT 和 GET 选项。

【问题讨论】:

  • 请定义Different,如果您能显示和/或告诉我们有什么区别,将会有所帮助..
  • 看看这个链接也许会有所帮助,因为我们看不到你现有的代码。codeproject.com/Articles/12198/…
  • 可以显示从导入队列读取消息并将相同消息放入导出队列的sn-p吗?
  • 我已经添加了代码sn-p,请分享你的想法。
  • @Shashi - 如何在发送消息中生成唯一的消息 id #s?

标签: c# .net ibm-mq


【解决方案1】:

当我将消息放入另一个队列时,下面的代码 sn-p 会保留相关 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);
        }
    }

【讨论】:

  • 我可以传递相关 id,我要问的是 mq 客户端是否会自动为每条发送的消息生成一个唯一的消息 id?
  • 您必须使用 MQPMO_NEW_CORREL_ID 选项告诉 MQ 自动生成关联 ID。
【解决方案2】:

这行代码让我得到了相关ID

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-14
    • 2022-11-08
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多