Mule4 IBM MQ连接器:在ACK模式下“ AUTO”-循环运行的消息-无穷大

问题描述 投票:0回答:1

我具有使用IBM MQ Connector的所有默认设置(确认模式AUTO)的基本流程。如果流在两者之间引发错误,则消息将开始循环运行而不结束线程。

我希望因为它是AUTO,所以应该通过看到错误来结束线程。

据我所记得,在较早的版本3.6中,它在ACK mode AUTO中可以正常运行

在Mule4中-设置ACK ManualImmediate时,它工作正常。

我尝试将IBM MQ连接器更新为v1.6.0,还将所有客户端jar更新为最新的'9.1.2.0'。所有人的行为都一样。

谁能解释这是带有ACK mode AUTO的Mule4中IBM Queue连接器的默认行为。谁能指出我所缺少的吗?

我正在使用Mule版本:4.2.2

   <ibm-mq:config name="IBM_MQ_Config" doc:name="IBM MQ Config" doc:id="a217b071-0d6b-4674-8696-0a74c8e8b4ee" sendCorrelationId="ALWAYS">
<ibm-mq:connection username="admin" password="passw0rd">
    <ibm-mq:connection-mode >
        <ibm-mq:client host="${mq.inbound.host}" queueManager="${mq.inbound.queueManager}" channel="${mq.inbound.channelName}" port="${mq.inbound.port}"/>
    </ibm-mq:connection-mode>
</ibm-mq:connection>

   <flow name="NotificationFlow" doc:id="a275ef91-8608-49a5-adcc-624c2dc6aacd" >
        <ibm-mq:listener doc:name="On New Message" doc:id="5de4cf1b-bd66-4519-b170-69f2159bd8b4" config-ref="IBM_MQ_Config" destination="testQ" ackMode="AUTO"/>
        <logger level="INFO" doc:name="Logger" doc:id="9c4c241b-d564-44ff-a2a3-6433e48ddf0a" />
        <ee:transform doc:name="Transform Message" doc:id="46c10c0c-3f0a-4184-a722-7caab39ca97d" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
import * from dw::Runtime
var result = []
output application/java
---
if(sizeOf(result) <= 0) fail('Data was empty') else result]]></ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>
mule dataweave mule-component mule4 mule-connector
1个回答
0
投票

这似乎是预期的结果。如果流中有错误,则不会确认该消息,因此会将其返回到队列。下一次读取将收到相同的未确认消息。称为poison message

从应用程序方面,您可以使用继续错误处理程序来处理错误,因此不会出现错误。这样,错误就被消除了,并且在流程完成时将确认消息。

如果要管理重新交付,则必须配置代理(在本例中为IBM MQ)以不同的方式处理重新交付,例如将其发送到DLQ。有关更多详细信息,请参见this other question中的注释。

© www.soinside.com 2019 - 2024. All rights reserved.