我有集成流程,我想在步骤之间将流程中的实体写入我的Gemfire缓存,但是我没有弄清楚该怎么做。
@Bean
public IntegrationFlow myFlow(CacheEntityDAL cacheDAL,Transformer t,
MyFilter f) {
return IntegrationFlows.from("inChannel")
.transform(t) //returns the entity
//I want to put to my cacheDAL.put(entity) here
.filter(f)
.channel("outChannel")
.get();
}
谢谢
答案 0 :(得分:1)
要写入Gemfire缓存,您需要使用CAR支持中的CacheWritingMessageHandler
。
但是由于这是one-way
,所以它只是用于编写,因此没有直接的方法可以将其插入流程的中间。另一方面,您只想使用相同的有效负载进行存储并向下游进行。为此,我建议将PublishSubscribeChannel
与两个订户一起使用:提到的CacheWritingMessageHandler
,然后其余流程。像这样:
return IntegrationFlows.from("inChannel")
.transform(t) //returns the entity
.publishSubscribeChannel(c -> c
.subscribe(sf -> sf
.handle(new CacheWritingMessageHandler(gemfireRegion()))
.filter(f)
.channel("outChannel")
.get();
因此,通过这种方式,您可以发送到Gemfire并移至主要流程,下一个filter()
将成为第二个订阅者,直到第一个订阅者在Gemfire上获得成功后,该工作才会生效。