Mule ESB中的MQ回退队列概念 - 无法有效工作

时间:2013-09-25 07:57:18

标签: mule ibm-mq mule-studio

我真的很喜欢这个概念。我有一个名为“IN”的WMQ输入队列(在WMQ中为此队列配置了一个名为“BACKOUT”的退出队列,其中thresold值为4)。正如预期的那样,它正在进行3次重试,最后BACKOUT队列数量正在增加,但是当我尝试浏览消息时,我无法看到这些消息。 一旦我停止骡子流并重新启动WMQ资源管理器,我就能在“BACKOUT”中看到这些消息。请找我的配置xml。请帮帮我。提前谢谢。

用Google搜索并发现交易未被提交是问题。但即使经过多次试验,也无法解决问题。请帮助。

    <?xml version="1.0" encoding="UTF-8"?>
    <wmq:connector name="WMQ_Connector" hostName="hostName" port="1portName" queueManager="QM" channel="Channel" validateConnections="true" doc:name="WMQ Connector" disableTemporaryReplyToDestinations="true"/>
   <flow name="BackoutFlow1" doc:name="BackoutFlow1">
    <wmq:inbound-endpoint  queue="IN" connector-ref="WMQ_Connector" doc:name="WMQ" exchange-pattern="request-response" >

        <wmq:transaction action="ALWAYS_BEGIN"/>

    </wmq:inbound-endpoint>
        <logger message="*******#[payload]****" level="INFO" doc:name="Logger"/>
        <set-payload value="#[hi]" doc:name="Set Payload"/>

    <wmq:outbound-endpoint queue="OUT" connector-ref="WMQ_Connector" doc:name="WMQ">
        <wmq:transaction action="NONE"/>
    </wmq:outbound-endpoint>
</flow>

1 个答案:

答案 0 :(得分:1)

WebSphere MQ将该消息写入同步点下的退出队列。但它不知道应用程序的上下文,如果不知道它是否代表您COMMIT。作为一般规则,WMQ试图不隐含地做不可逆转的事情,而是要求程序采取明确的行动。

理论上,程序知道何时发出BACKOUT并且可以在需要时立即发出COMMIT,或者继续处理消息并在下一个工作单元中包含已退出的消息。例如,该程序可以查看消息的撤销计数,以确定给定的消息是新消息还是正在重新传递。

在回退队列中,当它处于同步点下时,您无法看到该消息。显然当你停止Mule时,正在发出COMMIT。如果导致回退的应用程序被杀死而不是以有序的方式停止,通常的结果是由于隐式ROLLBACK命令,消息被重新排队到输入队列。

要在不必停止Mule的情况下查看消息,请在程序中发出COMMIT,否则将在队列中放入第二条消息,该消息将被读取并提交,而不会回滚。第二条消息上的COMMIT也将COMMIT退出队列中的已退出消息。