簡體   English   中英

AMQP支持的發布-訂閱通道和消息轉換

[英]AMQP-backed publish-subscribe channel and message conversion

在基於服務的應用程序中,我們將<int-amqp:publish-subscribe-channel/>用作事件總線。 send方法和消息處理程序均基於spring-messaging(自spring-integration 4.0(+)起)中的Message類。事件是對實體的更改,需要其他服務來處理。

問題是:spring-amqp將spring-messaging Message類視為任意對象有效載荷,因為它未被識別為spring-amqp Message 這將導致以下問題:

  • 默認消息格式是序列化的Java對象。 spring-amqp不僅僅序列化我們的原始有效負載對象,而且還序列化包裝的spring-messaging Message ,該Message在Spring Framework 4.0和4.1之間不兼容
  • 為JSON配置消息轉換器( Jackson2JsonMessageConverterJackson2JsonMessageConverter )不能解決問題,因為它還會轉換Message實例-這是spring-integration的GenericMessage ,由於缺少適當的構造函數,因此無法從JSON實例化

我們需要混合使用Spring版本,因為我們已經使用Grails 2.4(基於Spring 4.0)和當前的Spring Boot(依賴於Spring 4.1)實現了服務。

有沒有其他方法,最好是慣用的彈簧整合方法? 除了PublishSubscribeAmqpChannel之外,也許還有其他抽象嗎? 還是我們可以應用的其他任何消息轉換方式?

代替使用由amqp支持的通道,可以使用outbound-channel-adapter發送並使用inbound-channel-adapter接收。

通道保存整個消息(序列化的),而適配器將有效負載作為消息主體傳輸,並且(可選)將標頭映射到amqp標頭/從amqp標頭映射。

您將需要配置pub / sub的扇出交換(默認情況下,該通道將創建一個名為si.fanout.<channelName>si.fanout.<channelName>然后,您可以為每個收件人綁定一個隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM