我真的很喜欢这个概念。我有一个名为“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>
答案 0 :(得分:1)
WebSphere MQ将该消息写入同步点下的退出队列。但它不知道应用程序的上下文,如果不知道它是否代表您COMMIT
。作为一般规则,WMQ试图不隐含地做不可逆转的事情,而是要求程序采取明确的行动。
理论上,程序知道何时发出BACKOUT
并且可以在需要时立即发出COMMIT
,或者继续处理消息并在下一个工作单元中包含已退出的消息。例如,该程序可以查看消息的撤销计数,以确定给定的消息是新消息还是正在重新传递。
在回退队列中,当它处于同步点下时,您无法看到该消息。显然当你停止Mule时,正在发出COMMIT
。如果导致回退的应用程序被杀死而不是以有序的方式停止,通常的结果是由于隐式ROLLBACK
命令,消息被重新排队到输入队列。
要在不必停止Mule的情况下查看消息,请在程序中发出COMMIT
,否则将在队列中放入第二条消息,该消息将被读取并提交,而不会回滚。第二条消息上的COMMIT
也将COMMIT
退出队列中的已退出消息。