springcloud Ribbion 实战

发布于:2024-04-29 ⋅ 阅读:(32) ⋅ 点赞:(0)

一、Ribbon单独使用,配置自动重试,实现负载均衡和高可用

1.spring-cloud-starter-netflix-ribbon 包引入

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
     <!--单独使用Ribbon单独使用,不配合注册中心使用-->
      <!-- <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-config</artifactId>
          </dependency>-->

        <!--单独使用Ribbon单独使用,不配合注册中心使用-->
        <!-- <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      </dependency>-->

spring-cloud-starter-netflix-eureka-client 中使用包含的有spring-cloud-starter-netflix-ribbon的依赖,所以在单独使用spring-cloud-starter-netflix-ribbon 时候的使用需要排除掉spring-cloud-starter-netflix-eureka-client包。

在这里插入图片描述

2. 配置调用的被调用的服务amaster-work-server服务的,服务列表、超时时间、重试机制

spring:
    application:
        name: amaster-report-server
    cloud:
        load-balancer:
#            ribbon:
#                eager-load:
#                    enabled: true # 开启饥饿加载,这里为配合注册中心使用,因此关闭掉懒加载
#                    clients: # 指定饥饿加载的服务名称
#                        - amaster-work-server   # 用户服务
#                        - amaster-config-env # 仓库服务
            #开启ribbion的重试机制,默认是关闭的,不配置下面的重试机制是关闭的
            retry:
                enabled: true

amaster-work-server:
    ribbon:
        #请求连接的超时时间
        ConnectTimeout: 250
        #请求处理的超时时间
        ReadTimeout: 1000
        #对所有操作请求都进行重试,默认false,只有GET请求会重试;这是防止POST等对数据有影响的请求在重试后因为接口未做幂等性导致数据异常,影响较大
        OkToRetryOnAllOperations: true
        #切换实例的重试次数
        MaxAutoRetriesNextServer: 2
        #对当前实例的重试次数
        MaxAutoRetries: 1
         # 服务的实例地址列表
        listOfServers: localhost:9005,localhost:9015
        #给某个微服务配置负载均衡规则
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
server:
    port: 9007
    servlet:
        context-path: /amaster-report-server

amaster-work-server 是服务名,ribbon属性下的其余属性是ribbon的属性配置

3.配置RestTemplate的负载均衡策略

package com.zhang.buiness.amaster.reportserver.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTempletConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IRule randomRule() {
        //随机选取一个可用服务器
        return new RandomRule();
    }
}

4.配置调用

@RequestMapping("/env")
public class ReoportWebController {

    @Autowired
    private ReportServiceImpl reportService;


    @RequestMapping("/get/report/ribbion/alone/use/v1")
    private List<String> getEnvConfig(){
      return  reportService.ribbionAloneUse("amaster-work-server","/amaster-work-server/env/get/env/all/v1");

    }


}


@Service
public class ReportServiceImpl {
    @Autowired
    private RestTemplate restTemplate;
    public List<String> ribbionAloneUse(String clientMark, String path) {
        String url  = String.format("http://%s%s",clientMark,path);
        ResponseEntity<List> entity = restTemplate.getForEntity(url, List.class);
        return  entity.getBody();
    }
}


在调用的amaster-work-server 是配置文件中服务的列表名,/amaster-work-server/env/get/env/all/v1 是接口的path 路径了

5.测试

1.启动两个服务 amaster-work-server 9015 和 amaster-work-server 9005

启动 amaster-work-server 9015
在这里插入图片描述
启动 amaster-work-server 9005

java  -jar    -Dspring.config.location=./application-test.yml,./bootstrap.yml   ./amaster-work-server.jar

在这里插入图片描述
在这里插入图片描述

java 的启动命令

在这里插入图片描述
调用接口 http://127.0.0.1:9007/amaster-report-server/env/get/report/ribbion/alone/use/v1

多次调用 调用结果显示调用成功
在这里插入图片描述
调用到work 服务,随机调用的amaster-work-server的 9005 和9015 服务
在这里插入图片描述