.NET和WebSphere MQ的Java API中的MQQueue类包含三种类似的方法:

  • PutForwardMessage
  • PutReplyMessage
  • PutReportMessage

  • 我理解第一个方法的目的是因为它采用了传递的消息,将消息的副本复制并放入队列,但是第二和第三个方法的目的是什么?
    PutReplyMessage的文档说:

    使用邮件作为原始邮件将回复邮件放入队列
    PutReportMessage的文档说:

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

    而已。真正伟大而有用的文档。

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

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

    最佳答案

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

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

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

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

    09-27 03:14