我是Spring集成的新手,基本上只是試圖學習。我試圖用mysql db測試頻道消息存儲。這裏是我的彈簧配置爲使用消息存儲配置的通道維護事務 - Spring集成
<beans:bean id="jdbcChannelStore" class="org.springframework.integration.jdbc.store.JdbcChannelMessageStore">
<beans:property name="dataSource" ref="dataSource" />
<beans:property name="channelMessageStoreQueryProvider">
<beans:bean class="org.springframework.integration.jdbc.store.channel.MySqlChannelMessageStoreQueryProvider" />
</beans:property>
</beans:bean>
<beans:bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<beans:property name="driverClassName" value="org.mariadb.jdbc.Driver" />
<beans:property name="url" value="jdbc:mysql://localhost:3306/TESTDB" />
<beans:property name="username" value="root" />
<beans:property name="password" value="######" />
</beans:bean>
<!-- instanceRequests are processed by the filter one -->
<int:channel id="instanceRequests">
<int:queue capacity="20" message-store="jdbcChannelStore"/>
<int:interceptors>
<beans:bean class="com.trivialjava.rnd.interceptors.TimingInterceptor">
<beans:constructor-arg>
<beans:array>
<beans:value>com.trivialjava.rnd.entity.InstanceRequest</beans:value>
<beans:value>com.trivialjava.rnd.entity.SolutionRequest</beans:value>
</beans:array>
</beans:constructor-arg>
</beans:bean>
</int:interceptors>
</int:channel>
<int:service-activator input-channel="instanceRequests" ref="instanceRequestNameHandler" method="prepareName" output-channel="instanceRequestsDesc"/>
正如您將看到通道instanceRequests已配置Mariadb中的消息存儲。我注意到當消息進入時,表INT_CHANNEL_MESSAGE被填充,並且只要處理程序instanceRequestNameHandler讀取消息,它就刪除記錄。
我的要求是,如果由於某種原因,當處理程序正在處理時系統發生故障,消息應該保留在INT_CHANNEL_MESSAGE表中,直到另一個節點啓動它或系統重新啓動。當我說系統故障時,我的意思是服務器停止或重新啓動,而不是業務錯誤,對於業務錯誤我可以添加錯誤通道。因此,系統故障應該會有某種回滾,但現在還沒有發生。
我可以做些什麼或SI不支持嗎?
謝謝@GaryRussell!我遵循交易步驟,現在正在開展工作。我會添加一個答案,我如何做到這一點 – Tatha