gpt4 book ai didi

c# - 如何从 IBM MQ 上的 put 方法获得确认?

转载 作者:行者123 更新时间:2023-11-30 21:00:11 36 4
gpt4 key购买 nike

这是我正在使用的示例代码,但是,我不知道如何从放置或访问队列中获取消息已发送的响应。

 mqQueue = mqQMgr.AccessQueue("Queue Name", MQC.MQOO_OUTPUT |
MQC.MQOO_INPUT_SHARED | MQC.MQOO_INQUIRE);
mqQueue.Put(mqMsg, mqPutMsgOpts);

PUT 方法是一个 void 返回类型,例如,如果它是 bool,基于返回值 - true/false,我可以确认,消息已发送到队列,这就是我的问题,我该怎么做返回确认,以便将消息发送到队列。

任何输入都会非常有帮助。

最佳答案

根据澄清问题的评论进行更新:

将您的 PUT 包含在 try block 中并捕获 MQException。如果没有抛出 MQException,则 PUT 起作用并且您返回 RC=0。例如,这来自示例 PUT 程序:

    void PutMessages()
{
try
{
// mq properties
properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED);
properties.Add(MQC.HOST_NAME_PROPERTY, hostName);
properties.Add(MQC.PORT_PROPERTY, port);
properties.Add(MQC.CHANNEL_PROPERTY, channelName);

// display all details
Console.WriteLine("MQ Parameters");
Console.WriteLine("1) queueName = " + queueName);
Console.WriteLine("2) host = " + hostName);
Console.WriteLine("3) port = " + port);
Console.WriteLine("4) channel = " + channelName);
Console.WriteLine("5) numberOfMsgs = " + numberOfMsgs);
Console.WriteLine("");

// create connection
Console.Write("Connecting to queue manager.. ");
queueManager = new MQQueueManager(queueManagerName, properties);
Console.WriteLine("done");

// accessing queue
Console.Write("Accessing queue " + queueName + ".. ");
queue = queueManager.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);
Console.WriteLine("done");

// creating a message object
message = new MQMessage();
message.WriteString(messageString);

// putting messages continuously
for (int i = 1; i <= numberOfMsgs; i++)
{
Console.Write("Message " + i + " <" + messageString + ">.. ");
queue.Put(message);
Console.WriteLine("put");
}

// closing queue
Console.Write("Closing queue.. ");
queue.Close();
Console.WriteLine("done");

// disconnecting queue manager
Console.Write("Disconnecting queue manager.. ");
queueManager.Disconnect();
Console.WriteLine("done");
}

catch (MQException mqe)
{
Console.WriteLine("");
Console.WriteLine("MQException caught: {0} - {1}", mqe.ReasonCode, mqe.Message);
Console.WriteLine(mqe.StackTrace);
}
}

如前所述,这是来自示例代码,用于生产的真实程序可能会有更精细的异常处理。也就是说,API 调用要么成功,要么抛出 MQException。确切的行为取决于您的选择。例如,如果您在 GET 上请求消息转换,则可能会出现转换错误,而作为二进制有效负载检索到的完全相同的消息会成功。


之前的回复:

我不确定我是否理解这个问题,但我认为您要问的是如何使用 WebSphere MQ 设计请求/回复程序,这就是我的回应方式。但是,如果您所说的“响应”实际上是指 PUT 的原因和返回代码,请澄清问题,我会更新我的答案。

请求/响应的通常模式是请求程序首先打开回复队列。如果打开的队列的名称是模型队列,那么队列管理器会创建一个动态队列并返回一个句柄。否则,队列必须是预先存在的本地队列。

一旦应用程序有了回复队列的句柄,它就会打开请求队列并创建一个新的请求消息。本地回复队列的名称用于初始化请求消息的 replyToQueue 字段。本地队列管理器名称会自动填充到消息的 replyToQMgr 字段中。然后应用程序将消息放入回复队列中并等待回复。

如果有多个应用程序实例监听同一个回复队列,它们通常会为它们想要的特定消息指定相关 ID。通常的设计是读取请求消息的服务器将 MQMD.MsgID 放入回复消息的 MQMD.CorrelID 字段中,但有时它会将传入的消息 ID 传输到出站消息 ID。

确保在发出 GET 之前COMMIT PUT,否则您将永远得到回复。

信息中心主题中有更多相关信息 Design of the Request sample program在默认的 Windows WMQ 客户端安装中,您可以在 C:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet 中找到示例程序。我鼓励您熟悉示例并重用其中的一些代码。如果您实际上没有下载并安装完整的客户端,请在 SupportPac MQC75 免费获取一份副本。 .然后在安装的时候一定要选择安装SDK和示例代码的选项。

关于c# - 如何从 IBM MQ 上的 put 方法获得确认?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074791/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com