在MQQueue中PutReplyMessage和PutReportMessage的目的是什么?

时间:2011-10-10 15:49:19

标签: c# java .net ibm-mq

.NET和Java API for WebSphere MQ中的

MQQueue类包含三个类似的方法:

  • PutForwardMessage
  • PutReplyMessage
  • PutReportMessage

我理解第一个的目的,因为它接受了传递消息,制作了消息的副本并将其放入队列但第二和第三种方法的目的是什么?

PutReplyMessage的文档说:

  

使用消息作为原始消息将回复消息放入队列

PutReportMessage的文档说:

  

使用消息作为原始消息将报告消息放入队列

没有更多。非常棒,乐于助人的文档。

看起来这三种方法都是一样的。他们将原始消息传递给方法,制作消息的副本(包括正文和属性),并根据原始消息设置一些控制字段,如MessageIdCorrelationId,并将新创建的消息放入队列。它们之间的唯一区别是设置MessageType,可能还有一些条件应该如何复制控件头。但为什么以及何时需要这些方法呢?

我希望PutReplyMessage将带有请求的回复正文和原始消息的新消息,并在将其放入队列之前配置回复消息,其中包含消息类型和相关ID等必要字段。这个版本看起来很少使用,因为我总是要创建自己的回复消息来指定其内容并自己配置所有内容。一旦我这样做,我就可以使用Put方法而不是PutReplyMessage

1 个答案:

答案 0 :(得分:2)

转发邮件时,所有邮件标题字段都保持不变。这包括消息类型,身份上下文等。用户或应用程序必须具有+ passall授权,并且不能更改标题字段,但只能传递它们。

当发送回复消息时,原始消息上下文用于在回复的消息头中设置一些字段,但回复消息的身份上下文继承自推送应用程序而不是从原始消息。推杆可以选择覆盖回复邮件标题中的某些字段,例如是否将MsgID作为回复的MsgID传递,将其放在CorrelID字段中或放入这些字段中的应用程序定义值。

报告消息旨在用于发送应用程序定义的报告消息,例如ACKNACK。这些与WMQ定义的COA或COD报告消息不同。按照惯例,请求者可以不要求任何消息数据,部分数据或所有数据,但是推送应用程序可以根据需要自由地提供请求。

WebSphere MQ本机格式和消息类型在 Application Programming Guide Application Programming Reference 中定义。我认为在每种语言手册中复制此信息可能不合适,但我已从Infocenter .Net手册页提交了反馈,建议他们至少可以链接到相关文档中的相应部分。