Mule 如何为JDBC连接器实现死信队列,直到成功

Mule 如何为JDBC连接器实现死信队列,直到成功,mule,mule-studio,Mule,Mule Studio,我正在尝试在上实现死信队列,直到JDBC连接器成功。我希望在尝试配置的次数之后,当UntillSuccessful失败时,将有效负载发送到队列(DeadLetterQueue)。我参考了以下链接 下面是我的代码片段 <vm:endpoint exchange-pattern="one-way" path="dlqChannel" name="VM" doc:name="VM"/> 上面这一行是我的全局元素 <flow...> .... <until-su

我正在尝试在上实现死信队列,直到JDBC连接器成功。我希望在尝试配置的次数之后,当UntillSuccessful失败时,将有效负载发送到队列(DeadLetterQueue)。我参考了以下链接

下面是我的代码片段

<vm:endpoint exchange-pattern="one-way" path="dlqChannel" name="VM" doc:name="VM"/>

上面这一行是我的全局元素

<flow...>  .... <until-successful objectStore-ref="objectStore" deadLetterQueue-ref="dlqChannel" maxRetries="5" secondsBetweenRetries="60" doc:name="Until Successful" failureExpression="exception-type:java.sql.SQLException">
                  <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="Insert Query" queryTimeout="-1" connector-ref="Database" doc:name="Database"/>
    </until-successful>....</flow>

<flow name="Flow2" doc:name="Flow2">
    <endpoint ref="dlqChannel" />
    <logger message="DEAD DEAD DEAD LETTER LETTER LETTER #[message]" level="INFO" doc:name="Logger"/>
</flow>
<flow...> ...  <until-successful objectStore-ref="objectStore" deadLetterQueue-ref="dlqChannel" maxRetries="2" secondsBetweenRetries="10" doc:name="Until Successful" failureExpression="exception-type:java.sql.SQLException">
                  <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="Insert Query" queryTimeout="-1" connector-ref="Database" doc:name="Database"/>
    </until-successful>

....
</flow>

<flow name="Flow2" doc:name="Flow2">
    <vm:inbound-endpoint exchange-pattern="one-way" path="dlq" doc:name="VM"/>
    <logger message="DEAD DEAD DEAD LETTER LETTER LETTER #[message.payload]" level="INFO" doc:name="Logger"/>
</flow>
。。。。
....
在这一行
我得到一个编译错误,上面写着“对未知全局元素的引用:dlqChannel”

有谁能提出实现这一情景的最佳方法吗

谢谢,
Kalyan

您的端点被称为“VM”而不是“dlqChannel”。将名称更改为dlqChannel或将其指向VM。

正如Seba正确指出的,您的错误是由于名称/引用错误。至于如何实现deadLetterQueue,您需要一个入站端点。因此,在流程2中,将端点更改为

此问题已得到解决

下面是我的代码片段

<vm:endpoint exchange-pattern="one-way" path="dlq" name="dlqChannel" doc:name="VM"/>

上面一行是vm全局元素

<flow...>  .... <until-successful objectStore-ref="objectStore" deadLetterQueue-ref="dlqChannel" maxRetries="5" secondsBetweenRetries="60" doc:name="Until Successful" failureExpression="exception-type:java.sql.SQLException">
                  <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="Insert Query" queryTimeout="-1" connector-ref="Database" doc:name="Database"/>
    </until-successful>....</flow>

<flow name="Flow2" doc:name="Flow2">
    <endpoint ref="dlqChannel" />
    <logger message="DEAD DEAD DEAD LETTER LETTER LETTER #[message]" level="INFO" doc:name="Logger"/>
</flow>
<flow...> ...  <until-successful objectStore-ref="objectStore" deadLetterQueue-ref="dlqChannel" maxRetries="2" secondsBetweenRetries="10" doc:name="Until Successful" failureExpression="exception-type:java.sql.SQLException">
                  <jdbc-ee:outbound-endpoint exchange-pattern="request-response" queryKey="Insert Query" queryTimeout="-1" connector-ref="Database" doc:name="Database"/>
    </until-successful>

....
</flow>

<flow name="Flow2" doc:name="Flow2">
    <vm:inbound-endpoint exchange-pattern="one-way" path="dlq" doc:name="VM"/>
    <logger message="DEAD DEAD DEAD LETTER LETTER LETTER #[message.payload]" level="INFO" doc:name="Logger"/>
</flow>
。。。
....

根据UntlSuccessful中的“deadLetterQueue ref”,有效负载将转到vm全局端点中定义的vm:inbound端点(vm://dlq)。

明确地将vm:endpoint重命名为dlqChannel。名为VM的VM端点不会告诉任何人任何事情。