SpringCloud微服务实战(5)-Feign应用通信(上)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: SpringCloud微服务实战(5)-Feign应用通信

1 初识Feign

1.1 Feign是什么?

Feign是声明式的Web服务客户端。它使编写Web服务客户端更加容易。要使用Feign,请创建一个接口并添加注解。它支持可插拔的注解,包括Feign注解和JAX-RS(Java API for RESTful Web Services)注解。

Feign还支持可插拔的编码器和解码器。 Spring Cloud添加了对Spring MVC注解的支持,并支持使用Spring Web中默认使用的相同的HttpMessageConverters。 Spring Cloud集成了Eureka和Spring Cloud LoadBalancer,以在使用Feign时提供负载均衡的http客户端。


分布式系统实现远程调用的方式很多。按照协议划分,有 RPC,Webservice,http。不同协议下也有不同的框架实现,比如 dubbo 就是 RPC 框架,而本教程所讲解的 Feign 便可理解为一种 http 协议的框架实现,用于分布式服务之间通过 Http 进行远程调用。

1.2 项目中如何引用Feign?

在项目的 pom.xml 文件中使用

  • group为org.springframework.cloud
  • artifact id为spring-cloud-starter-openfeign

的起步依赖即可。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

spring boot 应用的启动类

@SpringBootApplication
@EnableFeignClients
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

StoreClient.java

@FeignClient("stores")
public interface StoreClient {
    @RequestMapping(method = RequestMethod.GET, value = "/stores")
    List<Store> getStores();
    @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
    Store update(@PathVariable("storeId") Long storeId, Store store);
}

1.3 代码解释

@FeignClient注解中,String值(上面的“stores”)是一个任意的客户端名称,用于创建负载均衡器的客户端。也可以使用url属性(绝对值或仅是主机名)指定URL。应用程序上下文中的Bean名称是接口的全限定名称。如果想要指定别名,那么还可以指定@FeignClient注解的qualifier属性值哦。


上面的负载均衡器客户端将要发现“stores”服务的物理地址。

如果你的应用程序是Eureka客户端,则它将在Eureka服务的注册表中解析该服务。如果你不想使用Eureka,则可以使用SimpleDiscoveryClient在外部配置中简单地配置服务器列表。

openFeign

image.png

2 SpringCloud中服务间两种restful调用方式

  • RestTemplate
  • Feign

RestTemplate的三种使用方式

image.png

image.png

3 负载均衡器:Ribbion

  • RestTemplate
  • Feign
  • Zuul
  • ServerList
  • IRule
  • ServerListFilter

4 追踪源码自定义负载均衡策略

image.png

image.png

image.png

image.png

image.png

image.png

image.png

启动两个 Product 服务

image.png

image.png

再 debug 启动 Order 服务

image.png

image.png

image.png

image.png

再看看其负载均衡策略

image.png

image.png

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
5天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
39 0
|
5天前
|
Cloud Native 算法 Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(上)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
30 0
|
7天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
8天前
|
Java API 对象存储
对象存储OSS产品常见问题之使用Spring Cloud Alibaba情况下文档添加水印如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
24 2
|
11天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
16 4
|
16天前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
|
16天前
|
SpringCloudAlibaba Java API
SpringCloud Alibaba微服务工程搭建(保姆级)
SpringCloud Alibaba微服务工程搭建(保姆级)
|
16天前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
22天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。
|
4天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。