修改訊息 - 壓縮及更多內容
存在許多擴充套件點。它們允許你在訊息傳送到 RabbitMQ 之前或接收到訊息之後立即對其進行一些處理。
正如訊息轉換器中所述,AmqpTemplate
的 convertAndReceive
操作提供了一個這樣的擴充套件點,你可以在其中提供一個 MessagePostProcessor
。例如,在你的 POJO 被轉換後,MessagePostProcessor
允許你為 Message
設定自定義頭部或屬性。
從 1.4.2 版本開始,RabbitTemplate
中增加了額外的擴充套件點 - setBeforePublishPostProcessors()
和 setAfterReceivePostProcessors()
。第一個允許在傳送到 RabbitMQ 之前立即執行一個後置處理器。使用批處理時(參見批處理),它在批處理組裝後、傳送前被呼叫。第二個在訊息接收後立即被呼叫。
這些擴充套件點用於實現壓縮等功能,為此,提供了幾個 MessagePostProcessor
實現。GZipPostProcessor
、ZipPostProcessor
和 DeflaterPostProcessor
在傳送前壓縮訊息,而 GUnzipPostProcessor
、UnzipPostProcessor
和 InflaterPostProcessor
解壓接收到的訊息。
從 2.1.5 版本開始,GZipPostProcessor 可以配置 copyProperties = true 選項以建立原始訊息屬性的副本。預設情況下,出於效能考慮會重用這些屬性,並使用壓縮內容編碼和可選的 MessageProperties.SPRING_AUTO_DECOMPRESS 頭部進行修改。如果你保留了原始出站訊息的引用,其屬性也會隨之改變。因此,如果你的應用程式使用這些訊息後置處理器保留了出站訊息的副本,請考慮開啟 copyProperties 選項。 |
從 2.2.12 版本開始,你可以配置壓縮後置處理器在內容編碼元素之間使用的分隔符。在 2.2.11 及更早的版本中,這被硬編碼為 : ,現在預設為 , 。解壓器可以同時處理這兩種分隔符。然而,如果你使用 2.3 或更高版本釋出訊息,並使用 2.2.11 或更早版本消費,你必須在壓縮器上將 encodingDelimiter 屬性設定為 : 。當你的消費者升級到 2.2.11 或更高版本後,你可以恢復為預設的 , 。 |
類似地,SimpleMessageListenerContainer
也提供了 setAfterReceivePostProcessors()
方法,允許在容器接收到訊息後執行解壓操作。
從 2.1.4 版本開始,RabbitTemplate
中增加了 addBeforePublishPostProcessors()
和 addAfterReceivePostProcessors()
方法,分別用於在釋出前和接收後後置處理器列表中新增新的後置處理器。還提供了移除後置處理器的方法。類似地,AbstractMessageListenerContainer
也增加了 addAfterReceivePostProcessors()
和 removeAfterReceivePostProcessor()
方法。詳情請參閱 RabbitTemplate
和 AbstractMessageListenerContainer
的 Javadoc。