取得領先
VMware 提供培訓和認證,以加速您的進展。
了解更多親愛的 Spring 社群:
我們很高興宣布 Spring Integration Hazelcast 支援專案的 Milestone 1 版本。使用 Milestone 儲存庫 和 Maven 或 Gradle 搶先體驗。
compile "org.springframework.integration:spring-integration-hazelcast:1.0.0.M1"
首先,特別感謝 Eren Avşaroğulları,他發起了這個專案,並且是一位積極且充滿活力的貢獻者。請務必參加今年 SpringOne 上我們與他的演講!
Spring Integration 實現了著名的 企業整合模式,並在基於 Spring 的應用程式中提供輕量級訊息傳遞,並支援透過宣告式配接器與外部系統整合。Spring Integration 的主要目標是提供一個簡單的模型來建構企業整合解決方案,同時保持關注點分離,這對於產生可維護、可測試的程式碼至關重要。
另一方面,Hazelcast 是領先的 Java 開源記憶體資料網格;它允許在伺服器、叢集和地理位置之間分配資料和計算,並管理非常大的資料集或高資料擷取速率。
因此,我認為將訊息傳遞引入基於 Hazelcast 的應用程式非常酷,並且可以輕鬆地透過 Hazelcast 分發 Spring Integration 訊息流程。
我相信這個擴展將會獲得社群的需求,並根據收到的反饋進行積極的開發和支援。
讓我們回顧一下這個 Milestone 為您提供的內容!
對於那些不想等待完成的專案,或者已經在其應用程式中使用 Spring Integration 和 Hazelcast,或者想要考慮這樣做的人,我很高興能介紹即使在這個里程碑版本之前就可以使用的功能。
由於 QueueChannel
的通用實作,我們已經可以使用 Hazelcast 擁有一個分散式訊息通道
@Configuration
@EnableIntegration
public static class ContextConfiguration {
@Bean
public HazelcastInstance hazelcastInstance() {
return Hazelcast.newHazelcastInstance(new Config());
}
@Bean
public PollableChannel hazelcastQueueChannel() {
return new QueueChannel(hazelcastInstance()
.Message<?>>getQueue("siQueue"));
}
}
將此配置放置在應用程式的 Hazelcast 叢集中的多個節點上,我們將擁有一個分散式 QueueChannel
,並且只有一個節點可以從此 IQueue
中輪詢單個 Message
。
Hazelcast 中的 ITopic
抽象與 JMS 中的 Topic
具有相似的語義:所有訂閱者都會收到已發布的訊息。透過一點想像力,我們可以將此機制用作現成可用的功能
@Configuration
@EnableIntegration
public static class ContextConfiguration {
@Bean
public ITopic<Message<?>> siTopic() {
return hazelcastInstance().getTopic("siTopic");
}
@Bean
public MessageChannel publishToHazelcastTopicChannel(
ITopic<Message<?>> siTopic) {
return new FixedSubscriberChannel(siTopic::publish);
}
@Bean
public MessageChannel fromHazelcastTopicChannel() {
return new DirectChannel();
}
@PostConstruct
public void init() {
siTopic().addMessageListener(m ->
fromHazelcastTopicChannel().send(m.getMessageObject()));
}
}
FixedSubscriberChannel
是 DirectChannel
的優化變體,它需要在初始化時使用 MessageHandler
。由於 MessageHandler
是一個函數式介面,我們可以簡單地為 handleMessage
方法提供 Lambda。當訊息被發送到 publishToHazelcastTopicChannel
時,它只會被發布到 Hazelcast ITopic
。com.hazelcast.core.MessageListener
也是一個函數式介面,因此我們可以為 ITopic#addMessageListener
提供 Lambda。因此,將整個 Message<?>
發布到 ITopic
允許我們在訂閱者上按原樣接收它,並將其發送到 MessageChannel
以在 Hazelcast 叢集中的所有訂閱節點上進行處理。
使用 Hazelcast ExecutorService
支援,我們可以配置一個 ExecutorChannel
,使其在整個叢集中一次只接受和執行一條訊息。我稱之為叢集範圍的單例
@Configuration
@EnableIntegration
public static class ContextConfiguration {
@Bean
public HazelcastInstance hazelcastInstance() {
return Hazelcast.newHazelcastInstance(new Config()
.addExecutorConfig(new ExecutorConfig()
.setName("singletonExecutor")
.setPoolSize(1)));
}
@Bean
public MessageChannel hazelcastSingletonExecutorChannel() {
return new ExecutorChannel(hazelcastInstance()
.getExecutorService("singletonExecutor"));
}
}
現在讓我們來談談 Spring Integration Hazelcast 擴展的第一個里程碑中已經可用的功能。
透過 Spring Integration Hazelcast 支援,我們為來自 Hazelcast 的輸入資料提供這些元件
<int-hazelcast:inbound-channel-adapter channel="multiMapChannel"
cache="multiMap"
cache-events="ADDED, REMOVED, CLEAR_ALL" />
<int-hazelcast:cq-inbound-channel-adapter
channel="cqMapChannel"
cache="cqMap"
cache-events="UPDATED, REMOVED"
predicate="name=TestName AND surname=TestSurname"
include-value="true"
cache-listening-policy="SINGLE" />
<int-hazelcast:ds-inbound-channel-adapter
channel="dsMapChannel"
cache="dsMap"
iteration-type="ENTRY"
distributed-sql="active=false OR age >= 25 OR name = 'TestName'">
<int:poller fixed-delay="100"/>
</int-hazelcast:ds-inbound-channel-adapter>
請參閱 Spring Integration Hazelcast 專案頁面,以取得有關其目的和配置選項的更多資訊。
對於那些已經熟悉 Spring Integration Gemfire 支援的人來說,這些元件的使用應該很明顯。
目前,我們只提供一個通用的輸出通道配接器,用於將資料放置到 Hazelcast 中
<int-hazelcast:outbound-channel-adapter channel="listChannel"
cache="distributedList" />
<bean id="distributedList" factory-bean="instance" factory-method="getList">
<constructor-arg value="distributedList"/>
</bean>
請在專案首頁上查看有關此配接器的更多資訊。我們將在 RELEASE
之前使此元件更加靈活,例如,利用上述 ITopic
的發布操作,添加執行階段 distributedObject
解析(例如透過 SpEL),允許接受 MapEntry
作為傳入訊息的 payload
以及其他。
這只是通往 RELEASE 的開始。我們與 Eren 一起考慮了幾個功能,例如 Hazelcast Distributed Execution Service Activator
、Hazelcast Client Support
、Hazelcast backed Subscribable Channel
、HazelcastLockRegistry
、Annotation Support
等,並希望在今年 9 月的 SpringOne 會議之前發布 1.0.0.RELEASE
版本。同時,請隨時透過 StackOverflow、JIRA 和 GitHub issues 與我們聯繫,分享您的想法!
專案頁面 | JIRA | Issues | [貢獻] (https://github.com/spring-projects/spring-integration/blob/master/CONTRIBUTING.md) | StackOverflow (spring-integration
tag)