1

我在 Spring-AMQP 中使用异步消息接收器来接收消息。目前只处理带有 JSON 内容的消息,但我还需要处理带有 XML 内容的消息。我当前的实现MessageListener有一个MessageConverter注入并在 中使用它onMessage(Message),如下所示:

MyMessage myMessage = (MyMessage) jsonConverter.fromMessage(message);

为了支持不同的内容类型,我显然可以使用MessageProperties来询问内容类型标题并手动选择要使用的转换器。但这似乎需要做很多工作,比如 Spring 应该为这种情况提供更好的支持。我希望找到一个通用的MessageConverter实现,可以从内容类型映射到特定的转换器,但似乎没有这样的事情。

编写这样的委派转换器是我的最佳选择吗?或者有没有办法配置ListenerContainer支持异步接收根据需要自动使用的多个转换器?

4

1 回答 1

1

我们有一个开放的 JIRA问题,请求支持 CompositeMessageConverter。

侦听器容器不支持转换,但我们确实有MessageListenerAdapter支持它们的容器(但只有一个,并且还有其他东西,比如处理回复)。

使用适配器意味着您可以在侦听器上使用 POJO 方法...

public void handleMessage(MyObject foo) {...}

如果您将委托转换器(委托给 json 或编组转换器的转换器)放入 中MLA,并且两个转换器创建相同的对象类型,这将正常工作。否则签名将不得不采取Object,你必须做instanceof测试。

在某些时候,我想让适配器更智能一点,以便它可以根据转换器创建的对象类型选择方法......

public void handleMessage(Foo foo) {...}

public void handleMessage(Bar bar) {...}

...但这确实是一个不同的问题。

如果你想出一个有用的转换器,你想为框架做出贡献,指南在项目 wiki 上

于 2014-03-06T21:41:03.027 回答