我在Spring-AMQP中使用异步消息接收器来接收消息。目前只处理具有JSON内容的消息,但我还要求处理具有XML内容的消息。我当前对MessageListener
的实施已注入MessageConverter
并在onMessage(Message)
中使用它,如下所示:
MyMessage myMessage = (MyMessage) jsonConverter.fromMessage(message);
为了支持不同的内容类型,我显然可以使用MessageProperties
来查询内容类型标题并手动选择要使用的转换器。但这似乎很多工作,像Spring应该为这种情况提供更好的支持。我希望找到一个从内容类型映射到特定转换器的通用MessageConverter
实现,但似乎没有这样的东西。
我最好选择这样的委托转换器吗?或者有没有办法配置ListenerContainer
以支持异步接收和多个转换器,这些转换器会根据需要自动使用?
答案 0 :(得分:1)
我们遇到open JIRA问题,请求支持CompositeMessageConverter。
侦听器容器不支持转换,但我们确实拥有支持它们的MessageListenerAdapter
(但只有一个,还有处理回复等其他内容)。
使用适配器意味着您可以在侦听器上使用POJO方法...
public void handleMessage(MyObject foo) {...}
如果您将委托转换器(委托给json或编组转换器的转换器)放入MLA
,并且两个转换器都创建相同的对象类型,这将正常工作。否则,签名必须采用Object
,您必须进行instanceof
次测试。
在某些时候,我想让适配器变得更聪明一些,所以它可以根据转换器创建的对象类型选择方法...
public void handleMessage(Foo foo) {...}
public void handleMessage(Bar bar) {...}
......但这确实是一个不同的问题。
如果您想出一个有用的转换器,您希望为该框架做出贡献,则指南为on the project wiki。