元資料儲存

許多外部系統、服務或資源不是事務性的(如 Twitter、RSS、檔案系統等),並且無法將資料標記為已讀。此外,有時您可能需要在某些整合解決方案中實現企業整合模式 冪等接收器。為了實現此目標並在與外部系統進行下一次互動或處理下一條訊息之前儲存端點的某些先前狀態,Spring Integration 提供了元資料儲存元件,作為具有通用鍵值契約的 org.springframework.integration.metadata.MetadataStore 介面的實現。

元資料儲存旨在儲存各種通用元資料(例如,已處理的最新 Feed 條目的釋出日期),以幫助 Feed 介面卡等元件處理重複項。如果元件沒有直接提供對 MetadataStore 的引用,則定位元資料儲存的演算法如下:首先,在應用程式上下文中查詢 ID 為 metadataStore 的 bean。如果找到,則使用它。否則,建立 SimpleMetadataStore 的新例項,它是一個記憶體實現,僅在當前執行的應用程式上下文的生命週期內持久化元資料。這意味著,在重啟後,您可能會遇到重複條目。

如果您需要在應用程式上下文重啟之間持久化元資料,該框架提供以下持久化 MetadataStores

Spring Cloud AWS 也提供了 DynamoDbMetadataStore

PropertiesPersistingMetadataStore 由屬性檔案和 PropertiesPersister 支援。

預設情況下,它僅在應用程式上下文正常關閉時持久化狀態。它實現了 Flushable,因此您可以透過呼叫 flush() 隨意持久化狀態。以下示例展示瞭如何使用 XML 配置 'PropertiesPersistingMetadataStore'

<bean id="metadataStore"
    class="org.springframework.integration.metadata.PropertiesPersistingMetadataStore"/>

或者,您可以提供自己的 MetadataStore 介面實現(例如,JdbcMetadataStore),並將其配置為應用程式上下文中的 bean。

從 4.0 版本開始,SimpleMetadataStorePropertiesPersistingMetadataStoreRedisMetadataStore 都實現了 ConcurrentMetadataStore。它們提供了原子更新,並可跨多個元件或應用程式例項使用。

冪等接收器和元資料儲存

當需要過濾已處理的傳入訊息並可以丟棄它或在丟棄時執行其他邏輯時,元資料儲存對於實現 EIP 冪等接收器 模式非常有用。以下配置顯示瞭如何執行此操作的示例

<int:filter input-channel="serviceChannel"
			output-channel="idempotentServiceChannel"
			discard-channel="discardChannel"
			expression="@metadataStore.get(headers.businessKey) == null"/>

<int:publish-subscribe-channel id="idempotentServiceChannel"/>

<int:outbound-channel-adapter channel="idempotentServiceChannel"
                              expression="@metadataStore.put(headers.businessKey, '')"/>

<int:service-activator input-channel="idempotentServiceChannel" ref="service"/>

冪等條目的 value 可以是過期日期,在此日期之後,該條目應由某個計劃的清理器從元資料儲存中刪除。

MetadataStoreListener

一些元資料儲存(目前只有 zookeeper)支援註冊監聽器以在專案更改時接收事件,如下例所示

public interface MetadataStoreListener {

	void onAdd(String key, String value);

	void onRemove(String key, String oldValue);

	void onUpdate(String key, String newValue);
}

有關更多資訊,請參閱 Javadoc。如果您只對部分事件感興趣,可以子類化 MetadataStoreListenerAdapter

© . This site is unofficial and not affiliated with VMware.