提问者:小点点

如何根据其他区域的更改更新GemFire区域


我的零售应用程序有各种上下文,如接收、传输等。对这些上下文的请求由使用Spring Boot开发的RESTful微服务处理。持久层是Cassandra。这是所有服务共享的,因为我们无法在DB级别对微服务进行垂直扩容,因为服务在概念上是紧密耦合的。

我们希望通过为不同的上下文创建不同的区域来在GemFire端进行垂直扩容。

例如,Cassandra中的BOX表将通过CacheWriter由Region Box-Recect(接收上下文)和Region Box-Transfer(传输上下文)更新。

我们的问题是如何保持这两个区域之间的数据同步?请建议任何其他方法也用于在GemFire端进行分离。

金火版本-

<dependency>
        <groupId>com.gemstone.gemfire</groupId>
        <artifactId>gemfire</artifactId>
        <version>8.2.6</version>
</dependency>

共2个答案

匿名用户

由于您使用的是Spring Boot,一种替代方法是执行以下操作:

  1. 首先使用@EnableGemfire CacheTransaction注释您的@SpringBootApplication类…

示例:

@SpringBootApplication
@EnableGemfireCacheTransactions
@EnableGemfireRepositories
class YourSpringBootApplication { 

    public static void main(String[] args) {
        SpringApplication.run(YourSpringBootApplication.class, args);
    }

    ...
}

@EnableGemfire CacheTransaction注解启用Spring Data GemFire的Gemfire TransactionManager,它将GemFire的CacheTransactionManager与Spring Transaction Management基础架构集成,然后允许您执行此操作…

现在,只需使用核心Spring的@Transactional注释注释您的@Service应用程序组件事务服务方法,如下所示…

@服务类YourBoxReceiverTransferService{

@Transactional
public <return-type> update(ReceiveContext receiveContext, 
        TransferContext transferContext {

    ...
    receiveContextRepository.save(receiveContext);
    transferContextRepository.save(transferContext);
    ...
}

}

正如您在这里看到的,我还使用了Spring Data(GemFire的)存储库基础结构来管理持久性操作(例如CRUD),这将在Spring设置的事务范围上下文中适当使用。

Spring方法的2个优点是,与使用gemFire的公共API相比,它不必要地将您耦合到gemFire(一种明确的代码气味,尤其是在Spring上下文中)…

>

  • 您不必将一堆样板代码、垃圾代码放入您的应用程序组件中,这些代码不属于那里!

    使用Spring的事务管理基础结构,更改事务管理策略非常容易,例如,如果需要,可以从GemFire的仅本地缓存事务切换到全局的、基于JTA的事务(例如,哦,好吧,现在我需要在GemFire区域和Cassandra BOX表更新后通过JMS消息队列发送消息,以通知某些下游进程接收/传输上下文已更新)。使用Spring的事务管理基础结构,您不需要更改一行应用程序代码来更改事务管理策略(例如本地到全局,或全局到本地等)。

    希望这有帮助!

    -约翰

  • 匿名用户

    您可以使用事务。这样的东西应该可以工作:

    txMgr = cache.getTransactionManager();
    txMgr.begin();
    boxReceive.put();
    ...
    boxtransfer.put();
    txMgr.commit();
    

    如果您将box接收和box传输区域放在一起并使用相同的密钥,或者使用分区解析器来托管数据,这将有效。