如何使用Until Successful实现JDBC Connector的deadLetterQueue

时间:2014-02-12 15:45:40

标签: mule mule-studio

我正在尝试在JDBC Connector的UntilSuccessful上实现deadLetterQueue。我想在没有按照配置完成任何次数的情况下将UntilSuccessful失败时将有效负载发送到队列(DeadLetterQueue)。我提到了以下链接

http://blogs.mulesoft.org/meet-until-successful-store-and-forward-for-mule/

Where in the application would you define the vm:endpoint for a dlqEndpoint-ref defined in an until-successful scope?

以下是我的代码段

<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”

任何人都可以提出实现这种情况的最佳方法。

谢谢, 格利扬

3 个答案:

答案 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" />