修改訊息 - 壓縮及更多

存在許多擴充點。它們可讓您在訊息上執行一些處理,無論是在訊息傳送到 RabbitMQ 之前或是在收到訊息之後立即執行。

訊息轉換器 中所示,其中一個擴充點位於 AmqpTemplate convertAndReceive 作業中,您可以在其中提供 MessagePostProcessor。例如,在您的 POJO 轉換完成後,MessagePostProcessor 可讓您在 Message 上設定自訂標頭或屬性。

從 1.4.2 版開始,RabbitTemplate 新增了額外的擴充點 - setBeforePublishPostProcessors()setAfterReceivePostProcessors()。第一個啟用在傳送到 RabbitMQ 之前立即執行的後處理器。當使用批次處理時 (請參閱 批次處理),這會在組裝批次之後且在傳送批次之前調用。第二個則是在收到訊息後立即調用。

這些擴充點用於壓縮等功能,並且為此目的,提供了幾個 MessagePostProcessor 實作。GZipPostProcessorZipPostProcessorDeflaterPostProcessor 在傳送之前壓縮訊息,而 GUnzipPostProcessorUnzipPostProcessorInflaterPostProcessor 則解壓縮收到的訊息。

從 2.1.5 版開始,可以透過 copyProperties = true 選項配置 GZipPostProcessor,以複製原始訊息屬性。預設情況下,為了效能原因,這些屬性會重複使用,並使用壓縮內容編碼和可選的 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 版開始,addBeforePublishPostProcessors()addAfterReceivePostProcessors() 已新增至 RabbitTemplate,以允許將新的後處理器附加到發布前和接收後後處理器清單中。此外,還提供了移除後處理器的方法。同樣地,AbstractMessageListenerContainer 也新增了 addAfterReceivePostProcessors()removeAfterReceivePostProcessor() 方法。有關更多詳細資訊,請參閱 RabbitTemplateAbstractMessageListenerContainer 的 Javadoc。