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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 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

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
监控 Java 持续交付
深入理解微服务架构及其在现代应用开发中的应用
深入理解微服务架构及其在现代应用开发中的应用
50 1
|
4天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
1月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
36 6
|
1月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
57 5
|
1月前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
41 5
|
2月前
|
Cloud Native 安全 持续交付
深入理解微服务架构及其在现代软件开发中的应用
深入理解微服务架构及其在现代软件开发中的应用
51 4
|
2月前
|
监控 持续交付 API
深入理解微服务架构及其在现代应用开发中的应用
深入理解微服务架构及其在现代应用开发中的应用
30 4
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
65 1
|
2月前
|
监控 持续交付 API
深入理解微服务架构及其在现代软件开发中的应用
深入理解微服务架构及其在现代软件开发中的应用
55 3
|
2月前
|
监控 持续交付 API
深入理解微服务架构:从设计原则到实践应用
深入理解微服务架构:从设计原则到实践应用