2014-03-06 26 views
1

我在Spring-AMQP中使用異步消息接收器來接收消息。目前只處理帶有JSON內容的郵件,但我還需要使用XML內容處理郵件。我目前的執行MessageListenerMessageConverter注入並使用它在onMessage(Message),就像這樣:是否有可能在Spring AMQP中有一個處理多種內容類型的異步消息接收器?

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

爲了支持不同的內容類型,我可以明顯地使用MessageProperties詢問內容類型頭和手動選擇轉換器使用。但是,這看起來像很多工作,像Spring應該爲這種情況提供更好的支持。我希望找到一個通用的MessageConverter實現,它將從內容類型映射到特定的轉換器,但似乎沒有這樣的事情。

是寫一個這樣的委託轉換器我最好的選擇?或者是有到ListenerContainer配置以支持異步接收在需要時自動使用多個轉換器的方法嗎?

回答

1

我們有一個CompositeMessageConverter的open JIRA問題,請求支援。

偵聽器容器不支持轉換,但我們確實有支持它們的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

+0

謝謝,@加里 - 拉塞爾。爲了確保我理解清楚,你說現在唯一的選擇是編寫一個基於消息內容類型選擇的委託/複合轉換器。正確? –

+0

我有一個基本的委託轉換器工作;這幾乎是微不足道的,因此,審閱並遵循項目準則需要的時間比實際撰寫時間要長;-)哦,我也必須寫一些單元測試。所以我很樂意貢獻它,但現在可能不太可能。 –

+0

是的,這是目前唯一的選擇。沒問題。 –

相關問題