首页 > 其他分享 >微服务设计模式 - 大使模式(Ambassador Pattern)

微服务设计模式 - 大使模式(Ambassador Pattern)

时间:2024-10-28 10:49:29浏览次数:8  
标签:Ambassador 调用 服务 Pattern 日志 设计模式 客户端

微服务设计模式 - 大使模式(Ambassador Pattern)

ambassador-in-microservice

定义

Ambassador Pattern 是一种常见的微服务设计模式,通常用于在微服务架构中代理和处理外部服务调用。通过使用 Ambassador Pattern,可以在调用外部服务时添加额外的逻辑,例如监控、日志记录、安全检查等。这种模式类似于一个中介(Ambassador),在真正的服务调用之前处理所有的预处理任务。

结构

  1. 客户端(Client): 发起请求的实体,可以是用户、应用程序或另一个服务。

  2. 大使(Ambassador): 代理实体,接收来自客户端的请求,对请求进行预处理,然后再转发给远程服务。

  3. 远程服务(Remote Service): 实际处理请求并返回响应的外部服务。

工作过程

客户端 (Client)
  |
  | 发出请求
  v
大使 (Ambassador)
  | - 预处理请求(如日志记录、认证、安全检查等)
  | - 转发请求至远程服务
  v
远程服务 (Remote Service)
  | - 接收请求并处理
  | - 返回响应
  v
大使 (Ambassador)
  | - 后处理响应(如日志记录、监控等)
  | - 返回响应至客户端
  v
客户端 (Client)
  1. 客户端向大使发出请求
  2. 大使接收到请求,执行以下操作:
    • 日志记录请求信息。
    • 进行安全检查或身份验证。
    • 将请求转发给远程服务。
  3. 远程服务处理请求并返回响应
  4. 大使接收到远程服务的响应,执行以下操作:
    • 日志记录响应信息。
    • 执行监控操作。
    • 将响应返回给客户端。

ambassador-seq

上面是关于 Ambassador Pattern 的序列图,它展示了客户端、Ambassador 和远程服务之间的交互过程。

优点

通过使用 Ambassador Pattern,可以获得以下优点:

  1. 增强安全性:可以在调用外部服务之前进行安全检查、身份验证等操作。

  2. 监控和日志记录:能够记录每一次外部服务的调用,便于监控和分析。

  3. 重试机制:在外部服务调用失败时,可以在 Ambassador 中实现重试机制。

  4. 抽象复杂性:将外部服务调用的复杂性抽象到 Ambassador 中,使客户端代码更加简洁。

使用场景

在微服务设计中,Ambassador Pattern 常用于以下场景:

  1. 跨网络的服务调用:当需要跨网络调用外部服务时,可以使用 Ambassador 进行额外的处理。

  2. 服务依赖复杂:当服务间的依赖关系复杂,需要在调用前后添加处理逻辑时。

  3. 需要统一的访问控制:在多服务调用中,需要统一进行访问控制和认证时。

示例代码

在 Spring Boot 中,可以通过创建服务层(Service Layer)来实现 Ambassador Pattern。以下示例代码的 AmbassadorService 就是一个典型的 Ambassador,它在调用远程服务之前和之后进行预处理和后处理。

ambassador-class

ClientController.java

@RestController
public class ClientController {
    private final AmbassadorService ambassadorService;
    
    @Autowired
    public ClientController(AmbassadorService ambassadorService) {
        this.ambassadorService = ambassadorService;
    }
    
    @GetMapping("/fetchData")
    public ResponseEntity<String> fetchData() {
        return ambassadorService.callRemoteService();
    }
}

AmbassadorService.java

@Service
public class AmbassadorService {
    
    private static final Logger logger = LoggerFactory.getLogger(AmbassadorService.class);
    
    @Autowired
    private RestTemplate restTemplate;
    
    public ResponseEntity<String> callRemoteService() {
        logger.info("Calling remote service...");
        
        // 预处理(pre-procoessing)中可以添加日志记录、身份验证等操作
        try {
            String response = restTemplate.getForObject("http://remote-service/myApi/myData", String.class);
            // 后处理(post-processing)中可以添加监控、日志记录等操作
            return new ResponseEntity<>(response, HttpStatus.OK);
        } catch (RestClientException e) {
            logger.error("Error calling remote service", e);
            return new ResponseEntity<>("Service Unavailable", HttpStatus.SERVICE_UNAVAILABLE);
        }
    }
}

RestTemplateConfiguration.java

@Configuration
public class RestTemplateConfiguration {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

总结

Robert-C-Martin-The-first-value-of-software-behavior-is-urgent-but-not-always

Ambassador Pattern 是一种强大的设计模式,可以在微服务架构中处理外部服务调用的复杂性。它不仅可以增加安全性,还能进行监控和日志记录,并对外部服务调用进行重试和统一管理。在 Spring Boot 中,通过创建服务层,可以轻松实现 Ambassador Pattern,从而简化客户端代码的复杂性,并提高整个系统的可靠性和可维护性,适用于各种复杂的微服务架构。

希望这篇技术博客能够帮助你更好地理解大使模式及其在云计算和微服务领域的应用。如果你对大使模式还有其他问题或者想要进一步探讨相关技术,欢迎留言交流。

标签:Ambassador,调用,服务,Pattern,日志,设计模式,客户端
From: https://blog.csdn.net/2404_88048702/article/details/143278857

相关文章

  • 设计模式-抽象工厂
    抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组具有共同主题的单独工厂。抽象工厂模式通过提供一个超级工厂创建其他工厂的接口,使得客户端使用抽象的接口操作具体对象,从而实现客户端与具体工厂类解耦。usingSystem;//抽象产品ApublicabstractclassAbst......
  • 【设计模式】Java创建型设计模式之工厂模式魔法:打造灵活的冰箱工厂
    标题:《Java工厂模式魔法:打造灵活的冰箱工厂》摘要:本文深入探讨Java中的创建型设计模式之工厂模式。通过一个冰箱工厂的示例,详细解释工厂模式的概念、实现方法以及其带来的好处。读者将了解到如何使用工厂模式创建不同品牌和大小的冰箱,同时体会到该模式在提高代码可维......
  • 【C++设计模式】之单例模式,一文看懂
    【C++设计模式】之单例模式一、什么是单例模式二、单例模式的实现1.懒汉版单例模式懒汉单例模式代码实现2.饿汉单例模式饿汉单例模式代码实现3.线程安全的懒汉单例模式线程安全的懒汉模式代码实现三、总结一、什么是单例模式单例模式是一种创建型设计模式,它的......
  • 2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis
    前言春招,秋招,社招,我们Java程序员的面试之路,是挺难的,过了HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今...近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备......
  • JAVA的设计模式都有那些
        Java设计模式是为了解决软件开发中常见的问题而创建的一系列最佳实践。它们提供了一种在特定情境下解决问题的方法论,并且已经被广泛验证和应用。这些模式不是具体的代码,而是关于如何组织代码以达到某种目的的高层次描述。设计模式通常分为三大类:创建型模式、结构型......
  • 《大话设计模式》java实现:第二章-策略模式
    《大话设计模式》java实现:第二章-策略模式第二章是使用策略模式实现商场收银系统,使收银系统的促销策略可以灵活更改。1.原始代码实现:packagegof;/**《大话设计模式》第二章策略模式*实现商场收银系统,可以选择不同促销策略*/importjavax.swing.*;importjava.aw......
  • 前端开发设计模式——工厂模式
    目录一、定义和特点1.定义2.特点二、实现方式三、使用场景1.创建复杂对象2.根据不同条件创建对象四、优点1.代码复用2.解耦对象创建和使用3.易于维护五、缺点1.增加代码复杂度2.工厂函数可能变得臃肿六、注意事项1.命名规范2.单一职责原则3.错误......
  • 工厂设计模式
    工厂设计模式工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,工厂模式的核心是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪一个类。工厂模式将实例化的过程延迟到子类中进行。类型:工厂设计模式有不同的变种,其中包括:简单工厂模式:由一个工厂......
  • 微服务设计模式-边车模式(Sidecar Pattern)
    微服务设计模式-边车模式(SidecarPattern)定义边车模式(SidecarPattern)是一种将应用程序的功能分离到一个独立的进程或容器中的设计模式。这个独立的进程或容器被称为边车(Sidecar),它与主应用程序(MainApplication)一起运行,并为其提供额外的功能和服务。边车模式可以看作是一......
  • 基于对称点模式(symmetric dot pattern)的多元数据融合-matlab代码
        引言受最近深度学习在计算机视觉和语音识别方面的成功启发,许多研究者提出将一维时间序列数据编码为不同类型的图像,这样可以放大数据中的动态特性,更好地表征原数据。基于对称点模式(symmetricdotpattern)的多元数据融合对称点模式(SymmetrizedDotPattern,SDP)算法可......