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


谢谢

最佳答案

要写入Gemfire缓存,您需要使用Spring Integration Gemfire支持中的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上获得成功后,它才能正常工作。

关于java - 如何在Spring Integration DSL中将对象放入Gemfire缓存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51875915/

10-09 05:00