我的设置:
我有一个消息守护进程使用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