ITPub博客

首页 > 数据库 > > 具有Infinispan的聚集幂等消费者模式

具有Infinispan的聚集幂等消费者模式

作者:gaokeke123 时间:2022-06-27 14:39:40 0 删除 编辑

我创建了一个小项目 ,该项目展示了如何将JBoss Infinispan与Apache Camel和幂等消费者模式一起使用,以确保消息不会在集群环境中被处理两次。 
假设您有一个应用程序,该应用程序必须通过将其部署在多个容器上才能轻松扩展。 但是应用程序必须在整个集群中仅处理一次唯一请求。 解决方案很简单:将Camel中的幂等消费者模式与易于扩展的存储库一起使用。 这就是Infinispan发挥作用的地方。 Infinispan具有极高的可扩展性,高度可用的键/值存储和数据网格。 如果将InfinispanIdempotentRepository与幂等的使用者一起使用,它将创建一个内存中的高速缓存来存储请求,并且在您启动该应用程序的另一个实例时,高速缓存实例将同步,并且所有应用程序中的幂等的使用者将不会处理现有的请求。不再。

IdempotentConsumer(2)
通过此项目 (幂等的消费者demo5),您可以启动任意数量的容器,每个容器将从8080(http:// localhost:8080 / idempotent / KEY)开始在新端口上启动剩余端点,如果执行带有密钥的GET请求,对其他任何容器具有相同密钥的后续请求将被拒绝。 在后台,Infinispan将在整个Camel应用程序集群中复制所有已处理的密钥,并确保一致性。

该应用程序的核心是以下路由定义,该路由定义为该应用程序的每个实例查找一个新的空闲端口号:

  1. public class IdempotentRoute extends RouteBuilder {
  2. private static final transient Logger LOGGER = LoggerFactory.getLogger(IdempotentRoute.class);
  3. private InfinispanIdempotentRepository infinispanRepo;
  4. private int port;
  5. @Override
  6. public void configure() throws Exception {
  7. from("restlet:http://localhost:" + port + "/idempotent/{key}?restletMethods=GET")
  8. .idempotentConsumer(header("key"), infinispanRepo)
  9. .setBody(simple("UNIQUE REQUEST ACCEPTED: ${header.key}"))
  10. .stop()
  11. .end()
  12. .setBody(simple("REQUEST REJECTED: ${header.key}"));
  13. }
  14. public InfinispanIdempotentRepository getInfinispanRepo() {
  15. return infinispanRepo;
  16. }
  17. public void setInfinispanRepo(InfinispanIdempotentRepository infinispanRepo) {
  18. this.infinispanRepo = infinispanRepo;
  19. }
  20. public void start() {
  21. port = AvailablePortFinder.getNextAvailable(8080);
  22. LOGGER.info("Using port: " + port);
  23. }
  24. }

很简单,不是吗。

翻译自: https://www.javacodegeeks.com/2014/08/clustered-idempotent-consumer-pattern-with-infinispan.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26692020/viewspace-3148040/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
大家好

注册时间:2013-08-14

  • 博文量
    1432
  • 访问量
    31615