修改訊息 - 壓縮及更多
存在許多擴充套件點。它們允許您在訊息傳送到 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。