如何在Spring Integration DSL中将对象放入Gemfire缓存?

时间:2018-08-16 11:24:44

标签: java spring-data spring-integration gemfile spring-integration-dsl

我有集成流程,我想在步骤之间将流程中的实体写入我的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();
    }

谢谢

1 个答案:

答案 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上获得成功后,该工作才会生效。