前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 微服务中的聚合器设计模式示例

Java 微服务中的聚合器设计模式示例

原创
作者头像
IT千锋教育
发布于 2023-05-31 08:42:07
发布于 2023-05-31 08:42:07
58100
代码可运行
举报
文章被收录于专栏:学习Java专栏学习Java专栏
运行总次数:0
代码可运行

微服务架构中的聚合器设计模式是一种设计模式,用于通过聚合多个独立的微服务的响应来组成一个复杂的服务。它也是与SAGA、CQRS和Event Sourcing一起的基本微服务设计模式之一。当客户端请求需要跨多个微服务分布的数据或功能时,此模式是合适的。可以提高系统的性能和可扩展性通过允许每个微服务专注于特定任务并减少单个微服务的工作量。在本文中,我们将讨论如何使用各种方法在 Java 中实现聚合器微服务模式,例如异步通信、同步通信或两者的组合。我们还将提供代码示例来说明每种方法。

Java 中的聚合器微服务模式及其示例

在 Java 中,可以使用各种方法来实现聚合器微服务模式,例如异步通信、同步通信或两者的组合。

1.异步通信

在 Java 中实现聚合器微服务模式的一种方法是在微服务之间使用异步通信。在这种方法中,客户端向聚合器微服务发送请求,然后聚合器将请求并行发送到各个微服务。 

每个微服务处理请求并将响应发送回聚合器微服务,然后聚合器微服务聚合响应并将结果返回给客户端。

这种方法的优点是允许微服务并发处理请求,从而提高系统性能。但是,它需要使用异步通信机制,例如消息队列或事件驱动架构,这会给系统带来额外的复杂性。

下面是一个在 Java 中使用异步通信的聚合器微服务示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
公共类 AsyncAggregatorMicroservice {
    私有最终 ExecutorService executorService;
    私有最终 Microservice1Client microservice1Client;
    私有最终 Microservice2Client microservice2Client;
    私有最终 Microservice3Client microservice3Client;

    public AsyncAggregatorMicroservice(ExecutorService executorService, Microservice1Client microservice1Client, Microservice2Client microservice2Client, Microservice3Client microservice3Client) {
        这个.executorService = executorService;
        这个.microservice1Client = microservice1Client;
        这个.microservice2Client = microservice2Client;
        这个.microservice3Client = microservice3Client;
    }

    公共 CompletableFuture<AggregatedResponse> processRequest(请求请求){
        CompletableFuture<Response1> response1Future
       = CompletableFuture.supplyAsync (()
            -> microservice1Client.processRequest(request), executorService) ;
        CompletableFuture < Response2 > response2Future  
      = CompletableFuture。供应异步(()
           -> microservice2Client.processRequest(request), executorService) ;
        CompletableFuture < Response3 > response3Future  
      = CompletableFuture。供应异步(()
           -> microservice3Client.processRequest(request), executorService) ;

        返回 CompletableFuture。allOf (response1Future, response2Future, response3Future) 
                。然后应用(v -> 
          new AggregatedResponse(response1Future.join(), response2Future.join(),
              response3Future.join())) ;
    }
}

在此示例中,AsyncAggregatorMicroservice类使用 Java Concurrency API 中的CompletableFuture 类将请求异步发送到各个微服务。CompletableFuture.allOf ()方法用于等待接收到所有响应,thenApply ( )方法用于聚合响应并将结果返回给客户端。

2.同步通信

在 Java 中实现聚合器微服务模式的另一种方法是使用微服务之间的同步通信。在这种方法中,客户端向聚合器微服务发送请求,然后聚合器微服务按顺序向各个微服务发送请求。 

 每个微服务处理请求并将响应发送回聚合器微服务,然后聚合器微服务聚合响应并将结果返回给客户端。

这种方法的优点是简单,因为它不需要使用异步通信机制。但是,它可能会对系统性能产生负面影响,因为聚合器微服务必须等待每个微服务完成其任务,然后才能继续下一个微服务。

下面是一个在 Java 中使用同步通信的聚合器微服务示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
公共 类 SyncAggregatorMicroservice  {
     private  final Microservice1Client microservice1Client;
    私有 最终Microservice2Client microservice2Client;
    私有 最终Microservice3Client microservice3Client;

    公共SyncAggregatorMicroservice(微服务 1 客户端微服务 1 客户端,
              微服务2客户端微服务2客户端,
              Microservice3Client microservice3Client) {
        这个.microservice1Client = microservice1Client;
        这个.microservice2Client = microservice2Client;
        这个.microservice3Client = microservice3Client;
    }

    public AggregatedResponse processRequest(请求请求){
        Response1 response1 = microservice1Client.processRequest(request);
        Response2 response2 = microservice2Client.processRequest(request);
        Response3 response3 = microservice3Client.processRequest(request);
        返回新的 AggregatedResponse(response1, response2, response3);
    }
}

在此示例中,SyncAggregatorMicroservice类一个接一个地同步向各个微服务发送请求。然后将响应汇总并返回给客户端。

异步和同步通信的结合

还可以通过结合异步和同步通信在 Java 中实现聚合器微服务模式。在这种方法中,客户端向聚合器微服务发送请求,然后根据系统的要求,聚合器微服务异步地向一些微服务发送请求,同步地向其他微服务发送请求。

这种方法允许在性能和简单性之间取得平衡,因为它允许微服务在可能的情况下并发处理请求,同时仍然保持实现简单。

以下是在 Java 中结合使用异步和同步通信的聚合器微服务示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
公共 类 HybridAggregatorMicroservice  {
     private  final ExecutorService executorService;
    私有 最终Microservice1Client microservice1Client;
    私有 最终Microservice2Client microservice2Client;
    私有 最终Microservice3Client microservice3Client;

    公共HybridAggregatorMicroservice(ExecutorService executorService,
      微服务1客户端微服务1客户端,微服务2客户端微服务2客户端,
      Microservice3Client microservice3Client) {
        这个.executorService = executorService;
        这个.microservice1Client = microservice1Client;
        这个.microservice2Client = microservice2Client;
        这个.microservice3Client = microservice3Client;
    }
public AggregatedResponse processRequest(请求请求){
CompletableFuture<Response1> response1Future
= CompletableFuture.supplyAsync(() -> microservice1Client.processRequest(请求),
执行服务);

Response2 response2 = microservice2Client.processRequest(request);
CompletableFuture<Response3> response3Future
= CompletableFuture.supplyAsync(() -> microservice3Client.processRequest(请求),
   执行服务);
    返回CompletableFuture.allOf(response1Future,response3Future)
            .thenApply(v -> new AggregatedResponse(response1Future.join(),
                 response2, response3Future.join()));
}

在此示例中,“HybridAggregatorMicroservice”类将请求异步发送到“microservice1Client”和“microservice3Client”,并同步发送到“microservice2Client”。然后将响应汇总并返回给客户端。

结论

Java 中的聚合器微服务模式是 一种有用的设计模式,用于通过聚合多个独立微服务的响应来组合复杂的服务。在 Java 中,可以使用异步通信、同步通信或两者的组合来实现此模式,具体取决于系统的要求。 

 异步通信可以提高系统的性能,但是需要使用额外的通信机制。同步通信更容易实现,但它会对性能产生负面影响。

异步和同步通信的组合允许在性能和简单性之间取得平衡。

更多精彩Java精彩内容欢迎B站搜索“千锋教育”或者扫码领取Java 学习全套资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
「第二部:容器和微服务架构](12) 基于异步消息的通信
在跨多个微服务及其相关的域模型传播更改时,异步消息传递和事件驱动的通信至关重要。正如前面在讨论microservices和有界上下文(BCs)时所提到的,模型(用户、客户、产品、帐户等)对不同的microservices或BCs可能有不同的含义。这意味着当发生更改时,您需要某种方法来协调不同模型之间的更改。解决方案是基于异步消息传递的最终一致性和事件驱动通信。
架构师研究会
2020/07/18
7400
「第二部:容器和微服务架构](12) 基于异步消息的通信
Go:使用 go-micro 构建微服务(一)
什么是微服务(microservice)?这是企业界正在向计算界提出的问题。一个产品的可持续性取决于它的可修改程度。
Freedom123
2024/03/29
1.4K0
Go:使用 go-micro 构建微服务(一)
微服务与测试(三)
在微服务的架构中,一般使用的是轻量级的通信方式,也就是基于HTTP的REST,也就是基于应用层的协议。就像在前面的文章中介绍中,微服务把一个单一的应用程序拆分成N个一组服务,这些服务来各自处理各自的外部请求,另外一点是这些服务会部署在不同的终端上运行,所以这些服务交互必须通过进程间的通信才能够完成,如下图:
无涯WuYa
2019/06/19
7530
微服务架构设计中的设计模式、原则及最佳实践
本文既有理论知识,又有实用信息:我们将学习每一种具体的模式,为什么以及应该在什么地方使用;然后,我们将看下应用了这些模式的参考架构;接下来,我们将综合运用新学到的模式设计我们的架构;最后,我们将确定选用什么技术实现架构。
用户2781897
2021/11/10
5230
微服务架构设计和其设计模式介绍
之前在推上看到一张图片,感觉总结的挺好,在我也展开总结了之后发现了这张图的原文,所以整体翻译了一遍。还是非常有价值的,值得学习。
黑光技术
2023/02/23
8720
微服务架构设计和其设计模式介绍
微服务与测试(四)
在前面的文章体系中对什么是微服务,以及微服务的优点和缺点都有所介绍,同时也介绍了单一应用程序的架构它所存在的缺点,以及微服务对单一程序架构进行的拆分和分离组件的应用。虽然我们很清晰的知道接口测试是对API的测试,也大概都听过契约测试,组件测试,端到端的测试,以及单元测试,其实在微服务架构中最核心的还是它的通信机制,就像我们在上一节文章中所提到的,如果我们只是单纯的在应用上层做接口测试,但是API Gateway出现问题,或者是底层的服务出现问题,所有的应用上层都得瘫痪,那么这也在另外一个角度给我们一个暗示,我们经常谈的分层,不单单是基于金字塔模型的分层,如果单纯的在API测试的维度来说,它也是存在分层,当然这个话题不是今天的主题。
无涯WuYa
2019/07/08
7120
微服务通信中的设计模式
我在上一篇文章中,我谈到了微服务中涉及到的设计模式。现在,我想深更深入介绍微服务架构中最重要的设计模式:微服务之间的数据通讯。当我们用于开发独立应用程序时通讯是一个艰巨的任务。我们必须仔细设计数据库表之间的关系和对象模型映射。在微服务的世界,应用系统被拆分成单独的服务,需要创建一个网格网络来进行相互通信。让我们来谈谈迄今为止为解决这个问题而发展起来的所有通讯方式和模式。
程序你好
2018/12/13
9600
一张图看懂微服务架构路线
众所周知,单体应用程序,由于其种种不足,几乎不支持敏捷方法。如果你想为一个大型或复杂的业务创建一个软件项目,最好从微服务架构开始。
架构精进之路
2024/05/11
1.5K0
一张图看懂微服务架构路线
微服务架构及设计模式
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/14
5730
微服务架构及设计模式
微服务通信的三种方法
在微服务架构的世界中,我们通过一系列服务构建应用。集合中的每项服务都符合以下标准:
疯狂的技术宅
2019/08/30
2.8K0
微服务架构中10个常用的设计模式
从软件开发早期(1960 年代)开始,应对大型软件系统中的复杂性一直是一项令人生畏的任务。多年来为了应对软件系统的复杂性,软件工程师和架构师们做了许多尝试:David Parnas 的模块化和封装 (1972), Edsger W. Dijkstra (1974)的关注点分离以及 SOA(1988)。
架构之家
2022/07/12
9870
微服务架构中10个常用的设计模式
什么是微服务,如何构建微服务
如今随着社交媒体的兴起,互联网的快速发展,应用程序变得越来越复杂,需要处理的任务也越来越多。
程序那些事儿
2023/03/07
4290
什么是微服务,如何构建微服务
微服务架构:10个实用设计模式
从软件开发早期(1960 年代)开始,应对大型软件系统中的复杂性一直是一项令人生畏的任务。多年来为了应对软件系统的复杂性,软件工程师和架构师们做了许多尝试:David Parnas 的模块化和封装 (1972), Edsger W. Dijkstra (1974)的关注点分离以及 SOA(1988)。
程序员皮皮林
2024/11/21
6390
微服务架构:10个实用设计模式
微服务架构究竟应该怎么进行服务通信?
今天这篇,我们主要讲解微服务架构究竟应该怎么进行服务间通信,同步通信和异步通信各有哪些问题,又应该怎么解决这些问题。
brookwang
2022/06/24
1.3K0
深入探讨微服务架构中的同步通信机制
微服务架构是一种设计方法,将应用程序划分为一组小型服务,每个服务在独立的进程中运行,通常根据业务能力进行组织。这些服务通过多种通信方式交互,以实现整个应用的功能。今天我们着重介绍同步通信,关于异步通信和消息队列(MQ)等内容将在后续讲解。
努力的小雨
2024/08/08
5521
微服务架构及其最重要的10个设计模式
微服务架构,独享数据库、事件驱动、CQRS、Saga、BFF、API 网关、Strangler、断路器、外部化配置、消费端驱动的契约测试
深度学习与Python
2021/01/06
1.3K0
Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署 重构单体应用为微服务 原文链接:Building Microservices: Inter-Process Communication in a Microservices Architecture ---- 简介 在单体应用中,模块间使用编程语言级别的方法或函数彼此调用。而基于微服务架构的本质是是运
butterfly100
2018/04/17
1.2K0
Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
微服务的进程间通信(IPC)
服务APIs使用版本语法来命名APIs的版本。版本语法包含三个部分:MAJOR.MINOR.PATCH。
charlieroro
2021/04/28
1.4K0
微服务的进程间通信(IPC)
微服务架构10个最重要的设计模式
自从软件开发的早期(1960年代)以来,解决大型软件系统中的复杂性一直是一项艰巨的任务。多年来,软件工程师和架构师为解决软件系统的复杂性进行了许多尝试:David Parnas的模块化和信息隐藏(1972),Edsger W. Dijkstra的关注分离(1974),面向服务的体系结构(1998)。
肉眼品世界
2021/01/06
1.1K0
微服务架构10个最重要的设计模式
【微服务】构建应用程序的顶级微服务设计模式
在当今市场上,微服务已成为构建应用程序的首选解决方案。众所周知,它们可以解决各种挑战,但是,熟练的专业人员在使用此架构时经常面临挑战。因此,相反,开发人员可以探索这些问题中的常见模式,并可以创建可重用的解决方案来提高应用程序的性能。 因此,在这篇关于微服务设计模式的文章中,我将讨论构建成功的微服务所必需的顶级模式。 本文将介绍以下主题: 什么是微服务? 用于设计微服务架构的原则 微服务的设计模式 什么是微服务? 微服务,又名微服务架构,是一种架构风格,将应用程序构建为围绕业务领域建模的小型自治服务的集
架构师研究会
2022/04/11
5340
【微服务】构建应用程序的顶级微服务设计模式
相关推荐
「第二部:容器和微服务架构](12) 基于异步消息的通信
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验