Spring Cloud Feign服务通信与负载均衡机制

首先要知道一点Feign的负载均衡是Ribbon来实现的。

Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix(Hystrix熔断保护机制),可以让我们不再需要显式地使用这两个组件。

Feign具有如下特性:

可插拔的注解支持,包括Feign注解和JAX-RS注解;

支持可插拔的HTTP编码器和解码器;

支持Hystrix和它的Fallback;

支持Ribbon的负载均衡;

支持HTTP请求和响应的压缩。

Feign的使用

举个栗子:我有一个orders-server服务,和一个user-server-3000服务,user-server-3000服务做了集群user-server-3001

      orders-server服务要访问user-server服务。这时就需要Ribbon来实现权重均衡。轮询user-server-3000和user-server-3001服务

1.在orders-server的pom.xml导包spring-cloud-starter-openfeign

<!--
    feign依赖
-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.在order-server的配置类中添加@EnableFeignClients("接口包的全限定名")注解

/**
 * @EnableFeignClients
 * 开启feign的客户端
 *
 * ("cn.itsorce.spring.feignclient")
 * 接口的权限定包名,不是必要的
 * 因为:
 * @EnableFeignClients扫描所有使用注解@FeignClient定义的feign客户端
 */

@SpringBootApplication
@EnableFeignClients("cn.itsorce.spring.feignclient")
public class OrdersServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrdersServerApplication.class);
    }

}

3.在cn.itsorce.spring.feignclient包下创建个接口

/**
 * @FeignClient(value="user-server")负载均衡客户端的名字
 *
 */

@FeignClient(value = "user-server")
public interface UserFeignClient { 
/** * * 这个方法是和user-server的controller的方法 * 方法名要和user-server的controller的方法,(返回值,方法名,参数,,requestMapping)一样 * * @param id * @return */
    @GetMapping("/user/{id}")
    User getUserById(@PathVariable("id")Long id);

}

4.在orders-server的controller注入接口,在方法中调用接口的方法实现负载均衡(黄色背景的是主要代码)

@RestController
public class OrderConsumerController {

    /**
     * 注入feign的接口
     */
    @Autowired
    private UserFeignClient feignClient;

    /**
     * 该方法是浏览器来调用
     * @param id
     * @return
     */
    @GetMapping("/order/user/{id}")
    public User getUserById(@PathVariable("id") Long id){
        User user = feignClient.getUserById(id);
        return user;
    }
}

5.重启服务,就行了。

修改负载均衡的机制:

如果要把轮询机制改成随机机制

在orders-server配置类中添加代码

@Bean
    public IRule ribbonRule() {
        // 负载均衡规则,改为随机
        return new RandomRule();
    }

重启服务,就行了。

原文地址:https://www.cnblogs.com/bigbigxiao/p/12115296.html

时间: 2024-11-06 15:29:09

Spring Cloud Feign服务通信与负载均衡机制的相关文章

Spring Cloud:使用Ribbon实现负载均衡详解(下)

在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何使用 Ribbon 实现客户端的负载均衡. 1. 使用 Ribbon 实现负载均衡 要实现负载均衡,首先要有多个订单服务提供者,目前我们就一个 microservice-order-provider01,端口号 8001,我们可以仿照这个服务,再创建两个子模块,也是订单服务提供者,取名为 micro

Spring Cloud Ribbon源码分析---负载均衡实现

上一篇结合 Eureka 和 Ribbon 搭建了服务注册中心,利用Ribbon实现了可配置负载均衡的服务调用.这一篇我们来分析Ribbon实现负载均衡的过程. 从 @LoadBalanced入手 还记得前面配置 RestTemplate: @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } 在消费端使用Spring 提供的 RestTemplate 来发出请求,而Ribbon 在 Rest

Spring cloud gateway自定义filter以及负载均衡

自定义全局filter package com.example.demo; import java.nio.charset.StandardCharsets; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframe

Spring Cloud Ribbon 源码分析---负载均衡算法

上一篇分析了Ribbon如何发送出去一个自带负载均衡效果的HTTP请求,本节就重点分析各个算法都是如何实现. 负载均衡整体是从IRule进去的: public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers according to key * * @return choosen Server object. NULL is returned if none * server i

Spring Cloud微服务安全实战_3-4_API安全机制之认证

 认证:登录和认证是 两个概念,比如你两周.一个月,可能只登录了一次,但认证却是每次访问都要经过的步骤. 对于图中的认证不成功,也要继续处理,这个我觉得得看业务,比如管理系统,不登录就不让你访问,但对于比如电商的商品信息,不登录,也是可以访问的. 一.写一个用户注册服务 数据库user表: User类: 单一职责原则:用户注册服务,得新建一个UserInfo类,用来接收前端传过来的注册用户信息,而最好不要使用User类直接接收. 新增方法,可以将UserInfo返回,前端可以做相应的展示. Co

Spring cloud Feign 深度学习与应用

简介 Spring Cloud Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单.Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数.格式.地址等信息.Feign会完全代理HTTP请求,开发时只需要像调用方法一样调用它就可以完成服务请求及相关处理.开源地址:https://github.com/OpenFeign/feign.Feign整合了Ribbon负载和Hystrix熔断,可以不再需要显式地

Spring Cloud微服务Ribbon负载均衡/Zuul网关使用

客户端负载均衡,当服务节点出现问题时进行调节或是在正常情况下进行 服务调度.所谓的负载均衡,就是当服务提供的数量和调用方对服务进行 取舍的调节问题,在spring cloud中是通过Ribbon来解决的.还有另外一 种途径是通过服务端的负载均衡Nginx来解决.Ribbon是客户端的负载均 衡,通过Eureka来获取所有的服务的数量,客户端来调用服务时,Ribbon 通过一系列的算法来进行调节,选择哪个服务来进行调用.默认无需对 Ribbon进行配置,它会采用默认的算法进行负载均衡.可以对负载均

Spring Cloud Ribbon---微服务调用和客户端负载均衡

前面分析了Eureka的使用,作为服务注册中心,Eureka 分为 Server 端和 Client 端,Client 端作为服务的提供者,将自己注册到 Server 端,Client端高可用的方式是使用多机部署然后注册到Server,Server端为了保证服务的高可用,也可以使用多机部署的方式.前面简单搭建了Eureka Client 和 Server,然后将Client成功注册到 Server,本节我们将来看看如何调用Eureka服务,在多机部署情况下如何保证负载均衡.Spring Clou

构建微服务架构Spring Cloud:服务消费(Feign)

Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定.它具备可插拔的注解支持,包括Feign注解.JAX-RS注解.它也支持可插拔的编码器和解码器.Spring Cloud Feign还扩展了对Spring MVC注解的支持,同时还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现. 下面