我正在尝试在JDBC Connector的UntilSuccessful上实现deadLetterQueue。我想在没有按照配置完成任何次数的情况下将UntilSuccessful失败时将有效负载发送到队列(DeadLetterQueue)。我提到了以下链接
http://blogs.mulesoft.org/meet-until-successful-store-and-forward-for-mule/
以下是我的代码段
<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>
在这一行<endpoint ref="dlqChannel" />
我收到编译错误说“引用未知的全局元素:dlqChannel”
任何人都可以提出实现这种情况的最佳方法。
谢谢, 格利扬
答案 0 :(得分:1)
您的终端被称为“VM&#39;不是&#39; dlqChannel&#39;。将名称更改为dlqChannel或将其指向VM。
答案 1 :(得分:1)
此问题已得到解决。
以下是我的代码段。
<vm:endpoint exchange-pattern="one-way" path="dlq" name="dlqChannel" doc:name="VM"/>
以上行是vm全局元素
<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>
根据UntilSuccessful中的“deadLetterQueue-ref”,有效负载转到vm:inbound-endpoint(vm:// dlq),如vm全局端点中所定义。
答案 2 :(得分:0)
正如Seba正确指出的那样,您的错误是由于错误的名称/参考。至于如何实现deadLetterQueue,您需要一个入站端点。因此,在Flow2中,将端点更改为<inbound-endpoint ref="dlqChannel" />
。