2014-02-12 62 views
0

我想在UntilSuccessful for JDBC連接器上實現deadLetterQueue。我想發送有效負載到一個隊列(DeadLetterQueue)時,如果UntilSuccessful在嘗試了所有配置的次數後失敗。我提到以下鏈接如何實現JDBC連接器的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" />我得到合作mpile錯誤說:「引用未知的全局元素:dlqChannel」

任何人都可以提出實現此方案的最佳方法。

感謝, 格利揚

回答

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:入站端點(VM:// DLQ)如在VM定義全球終點。

1

您的端點被稱爲 '虛擬機' 而不是 'dlqChannel'。將名稱更改爲dlqChannel或將其指向VM。

+0

絕對將vm:endpoint重命名爲dlqChannel。名爲虛擬機的VM端點不會告訴任何人。 –

0

正如Seba正確指出的,您的錯誤是由於錯誤的名稱/ ref引起的。至於如何實現deadLetterQueue,您需要一個入站端點。因此在Flow2中,將端點更改爲<inbound-endpoint ref="dlqChannel" />