crm开发定制微服务之——负载均衡和服务接口调用(Ribbon、openfeign)

前言
👏作者简介:我是笑霸final,crm开发定制一名热爱技术的在校学生。
📝个人主页: ||
📕系列专栏:
📧crm开发定制如果文章知识点有错误的地方,请指正!crm开发定制和大家一起学习,一起进步👀
🔥crm开发定制如果感觉博主的文章还不错的话,👍点赞👍 + 👀关注👀 + 🤏收藏🤏

目录

一、简介

  • 是什么
    Spring Cloud Ribbon是基于Netflix Ribboncrm开发定制实现的一套 客户端 负载均衡 crm开发定制工具简单的说,Ribbon是Netflixcrm开发定制发布的开源项目,crm开发定制主要功能是提供客户端crm开发定制的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这次额机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

  • Ribbon工作步骤
    第一步先选择 EurekaServer,它优先选择同一个区域内负载较少的server
    第二步再根据用户指定的策略,再从server取到的服务注册列表中选择一个地址

  • Ribbon核心组件IRule

二、Ribbon入门案列

2.1引入依赖

  • 使用的Eureka集成了ribbon
 		<dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>        </dependency>
  • 1
  • 2
  • 3
  • 4

  • 也可以单独使用ribbon
   <dependency>     <groupId>org.springframework.cloud</groupId>     <artifactId>spring-cloud-starter-ribbon</artifactId>   </dependency>
  • 1
  • 2
  • 3
  • 4

2.2 使用ribbon

我们用的RestTemplate+ribbon来实现负载均衡

主程序(加@EnableEurekaClient注解)

@SpringBootApplication@EnableEurekaClientpublic class OrderMain80 {    public static void main(String[] args) {        SpringApplication.run(OrderMain80.class,args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

controller

@RestControllerpublic class DeptController_Consumer{	private static final String REST_URL_PREFIX = "http://CLOUD-PAYMENT-SERVICE"; //微服务的虚拟id 	@Autowired	private RestTemplate restTemplate; 	@RequestMapping(value = "/consumer/dept/add")	public boolean add(Dept dept)	{		return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);	}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这样就能在CLOUD-PAYMENT-SERVICE开启负载均匀了

2.2修改负载均匀的方式

  • 默认按照RoundRobinRule(轮询)的策略获取服务,如果获取的服务失败侧在指定的时间会进行重试,进行获取可用的服务

  • 根据官方文档的意思,推荐在 springboot 主程序扫描的包范围之外进行自定义配置类

  • 创建配置类

    代码如下

  • 然后在启动类加上@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)注解

三 、简介

  • 是什么
    OpenFeign为微服务架构下服务之间的调用提供了解决方案,OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。

  • openfeign的用途
    服务发现,负载均衡,服务调用

  • 原理
    基于@EnableFeignClients 将所有被@FeignClient注解的类 注册到容器中。当这些被@FeignClient注解的类被调用时会创建一个动态代理的对象为我们创建被调用类的实例,然后都会被统一转发给 Feign 框架所定义的一个 InvocationHandler , 由该 Handler 完成后续的 HTTP 转换, 发送, 接收, 翻译HTTP响应的工作。

四、openfeign的使用

4.1导入

  <!--openfeign-->        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-openfeign</artifactId>        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

  • 也是集成了ribbon

4.2服务调用

  • 上面我们用的是ribbon+restTemplate
  • 现在直接openfeign

一、接口+注解(微服务调用接口=@FeignClient
写服务接口

代码如下

@Component@FeignClient(value = "CLOUD-PAYMENT-SERVICE")public interface PaymentFeignService {    @GetMapping("/payment/get/{id}")    CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

二、yml文件

server:  port: 8000eureka:  client:    register-with-eureka: false    service-url:      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、主启动类开启功能(加@EnableFeignClients注解)

@SpringBootApplication@EnableFeignClientspublic class OrderFeignMain80 {    public static void main(String[] args) {        SpringApplication.run(OrderFeignMain80.class,args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

四、业务类

@RestController@Slf4jpublic class OederFeignController {    @Resource    private PaymentFeignService paymentFeignService;    @GetMapping(value = "/consumer/payment/get/{id}")    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id)    {        return paymentFeignService.getPaymentById(id);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4.3 openfeign超时控制

只需要在yaml文件加上如下代码

#设置feign客户端超时时间(OpenFeign默认支持ribbon)ribbon:#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间  ReadTimeout: 5000#指的是建立连接后从服务器读取到可用资源所用的时间  ConnectTimeout: 5000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

完整的yml文件

server:  port: 8000eureka:  client:    register-with-eureka: false    service-url:      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/#设置feign客户端超时时间(OpenFeign默认支持ribbon)ribbon:#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间  ReadTimeout: 5000#指的是建立连接后从服务器读取到可用资源所用的时间  ConnectTimeout: 5000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

4.4 openfeign日志打印功能

先在yml加上

logging:  level:    # feign日志以什么级别监控哪个接口    具体的接口路径: debug
  • 1
  • 2
  • 3
  • 4

比如我的yml文件

server:  port: 8000eureka:  client:    register-with-eureka: false    service-url:      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/#设置feign客户端超时时间(OpenFeign默认支持ribbon)ribbon:#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间  ReadTimeout: 5000#指的是建立连接后从服务器读取到可用资源所用的时间  ConnectTimeout: 5000logging:  level:    # feign日志以什么级别监控哪个接口    com.xbfinal.springcloud.service.PaymentFeignService: debug
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

然后写配置类

@Configurationpublic class FeignConfig{    @Bean    Logger.Level feignLoggerLevel()    {        return Logger.Level.FULL;//详细日志    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 日志级别介绍
    NONE:默认的,不显示任何日志
    BASIC:仅记录请求方法、URL、响应状态码及执行时间
    HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息
    FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据

  • 测试


    🔥如果感觉博主的文章还不错的话,👍点赞👍 + 👀关注👀 + 🤏收藏🤏

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发