我的設置:
我有一個消息守護進程使用ActiveMQ將消耗JSON消息。
JSON消息的發佈者添加了具有值的type
頭,例如,com.example.Foo
這是json消息的類型。我用這個將json轉換成pojo。彈簧集成 - 異常和重試
Spring配置:
一旦接收到消息,這些都是它通過以下步驟:
1.變壓器:來變換JSON來POJO
2.淨荷類型路由器:基於POJO的類型,將pojo路由到適當的服務激活者。
3.服務激活器:處理消息。
<int:chain input-channel="transformerChannel">
<int:transformer id="jsonToPojoTransformer" ref="JsonToPojoTransformer" method="transform" />
<int:payload-type-router default-output-channel="defaultChannel">
<int:mapping type="com.example.Foo" channel="fooHandlerChannel"/>
<int:mapping type="com.example.Bar" channel="barHandlerChannel"/>
</int:payload-type-router>
</int:chain>
<int:service-activator input-channel="fooHandlerChannel" ref="fooHandler" method="onMessage"/>
<int:service-activator input-channel="barHandlerChannel" ref="barHandler" method="onMessage"/>
服務激活定義:
public class FooHandler {
public void onMessage(Foo foo) {...}
}
問題:
我想知道如何訪問郵件頭在服務激活。由於變換器正在返回pojo,因此服務激活器似乎無法訪問消息頭。
可以說服務激活器無論出於何種原因都無法調用下游休息服務。我現在要跳過處理此消息,並且稍後要重試此消息。或者讓我們說在處理這封郵件時有一個例外。我想在延遲一段時間後重試處理此消息。我該如何做到這一點?
- 編輯 -
刪除細節來減少問題的大小按阿爾喬姆的評論。
我的服務激活器被定義爲'public void fooHandler(Foo foo){...}'。因此,我想知道如何訪問標題。我將它改爲'public void fooHandler(Message > message){...}'。現在有效負載具有'Foo'的實例,並且消息頭可用。我沒有意識到變壓器返回的內容也包含在'Message'中。 我增加了更多的細節來解釋我爲什麼在做我在做的事情。很多時候,人們會問我爲什麼選擇一種特定的方式來做某件事。因此詳細的長信息。 – shravanp
好的。也許這只是晚上的效果:-)。我的答案有用嗎?還是你需要其他的東西? –
我正在嘗試查找有關客戶端的tx的spring文檔。你能指點我正確的文件嗎?我仍在搜索大量的春季集成參考。 – shravanp