Ribbon的简单使用

Ribbon是一个为客户端提供负载均衡功能的服务,它内部提供了一个叫做ILoadBalance的接口代表负载均衡器的操作,比如有添加服务器操作、选择服务器操作、获取所有的服务器列表、获取可用的服务器列表等等,其主要功能是提供客户端实现负载均衡算法

客户端

@SpringBootApplication
@EnableEurekaClient
public class SpringcloudConsumer8002Application {
    
    

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
    
    
        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
    }
    public static void main(String[] args) {
    
    
        SpringApplication.run(SpringcloudConsumer8002Application.class, args);
    }
}

server:
  port: 80
eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    #registry-fetch-interval-seconds: 5 #在开发环境下,可以修改为 5 秒获取一次。生产环境下一般不用修改
    service-url:
     defaultZone: http://127.0.0.1:8080/eureka/
  instance:
    prefer-ip-address: true
    ip-address: 127.0.0.1
spring:
  application:
    name: xxx

注册中心

server:
  port: 8080
spring:
  application:
    name: goodtype-server
eureka:
  server:
    enable-self-preservation: false   # 关闭自我保护模式
    eviction-interval-timer-in-ms: 1000  # 扫描失效服务的间隔时间(缺省为 60*1000ms)
  instance:
    hostname: localhost         #eureka服务端的实例名称
    instance-id: goodtype-server-8080   #对应status的name
    prefer-ip-address: true
  client:
    register-with-eureka: false  # 是否向注册中心注册自己
    fetch-registry: false  #为 false 表示自己是注册中心
    service-url: #注册地址
      #单机版本
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      #集群
      defaultZone: http://com.luo1:7001/eureka/,http://com.luo2:7002/eureka/

服务one


@RestController
public class GoodstypeController {
    
    

    @Autowired
    private GoodstypeI goodstypeI;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/provider/goodstype/get/{id}")
    public Goodstype findById(@PathVariable("id") String id){
    
    
        return goodstypeI.findById(id);
    }
    @GetMapping("/provider/goodstype/list")
    public List queryAll(){
    
    
        return goodstypeI.queryAll();
    }
    @GetMapping("/provider/goodstype/add")
    public int addGoodstype(Goodstype goodstype){
    
    
        return goodstypeI.addGoodstype(goodstype);
    }

    //获取注册进来的微服务的一些信息
    @GetMapping("/provider/goodstype/discovery")
    public Object discovery(){
    
    
        //获取微服务列表
        List<String> services = discoveryClient.getServices();
        System.out.println(services);
        //得到具体一个微服务信息
        List<ServiceInstance> serviceInstances = discoveryClient.getInstances("GOODSTYPE-PROVIDER");
        for (ServiceInstance instance : serviceInstances) {
    
    
            System.out.println(instance.getInstanceId());//得到实例的id
            System.out.println(instance.getHost());//得到主机名
            System.out.println(instance.getPort());//得到端口号
            System.out.println(instance.getUri());//得到uri
        }
        return this.discoveryClient;
    }
}
server:
  port: 8001
mybatis:
  mapper-locations: classpath:mapper/*.xml
spring:
  application:
    name: goodstype-provider
  datasource:
    username: root
    password: root
    url: jdbc:mysql://127.0.0.1/xsj?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
eureka:
  instance:
    ip-address: 127.0.0.1
    lease-renewal-interval-in-seconds: 5  # 心跳,服务续约(renew)的间隔,默认为 30 秒
    lease-expiration-duration-in-seconds: 10 # 服务失效时间,默认值 90 秒
    prefer-ip-address: true # 当调用 getHostname 获取实例的 hostname 时,返回ip 而不是 host 名称
  client:
    fetch-registry: true # 是否拉取服务注册信息
    register-with-eureka: true # 向服务中心注册自己
    registry-fetch-interval-seconds: 30 #client间隔多久去拉取服务器注册信息,默认为30秒
    service-url:  # 注册地址
      defaultZone: http://127.0.0.1:8080/eureka/,http://com.luo1:7001/eureka/,http://com.luo2:7002/eureka/
info:
  app.name: ljk.cloud
  company.name: kk

服务two

@RestController
public class GoodstypeController {
    
    

    @Autowired
    private GoodstypeI goodstypeI;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/provider/goodstype/get/{id}")
    public Goodstype findById(@PathVariable("id") String id){
    
    
        return goodstypeI.findById(id);
    }
    @GetMapping("/provider/goodstype/list")
    public List queryAll(){
    
    
        return goodstypeI.queryAll();
    }
    @GetMapping("/provider/goodstype/add")
    public int addGoodstype(Goodstype goodstype){
    
    
        return goodstypeI.addGoodstype(goodstype);
    }

    //获取注册进来的微服务的一些信息
    @GetMapping("/provider/goodstype/discovery")
    public Object discovery(){
    
    
        //获取微服务列表
        List<String> services = discoveryClient.getServices();
        System.out.println(services);
        //得到具体一个微服务信息
        List<ServiceInstance> serviceInstances = discoveryClient.getInstances("GOODSTYPE-PROVIDER");
        for (ServiceInstance instance : serviceInstances) {
    
    
            System.out.println(instance.getInstanceId());//得到实例的id
            System.out.println(instance.getHost());//得到主机名
            System.out.println(instance.getPort());//得到端口号
            System.out.println(instance.getUri());//得到uri
        }
        return this.discoveryClient;
    }
}
server:
  port: 9001
mybatis:
  mapper-locations: classpath:mapper/*.xml
spring:
  application:
    name: goodstype-provider
  datasource:
    username: root
    password: root
    url: jdbc:mysql://127.0.0.1/xsj?serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
eureka:
  instance:
    ip-address: 127.0.0.1
    lease-renewal-interval-in-seconds: 5  # 心跳,服务续约(renew)的间隔,默认为 30 秒
    lease-expiration-duration-in-seconds: 10 # 服务失效时间,默认值 90 秒
    prefer-ip-address: true # 当调用 getHostname 获取实例的 hostname 时,返回ip 而不是 host 名称
  client:
    fetch-registry: true # 是否拉取服务注册信息
    register-with-eureka: true # 向服务中心注册自己
    registry-fetch-interval-seconds: 30 #client间隔多久去拉取服务器注册信息,默认为30秒
    service-url:  # 注册地址
      defaultZone: http://127.0.0.1:8080/eureka/,http://com.luo1:7001/eureka/,http://com.luo2:7002/eureka/
info:
  app.name: ljk.cloud
  company.name: kk

在这里插入图片描述

默认是轮询算法,可以自定义负载均衡算法
因为是Ribbon基于客户端的,所以别忘记加入注册中心哦

猜你喜欢

转载自blog.csdn.net/qq_42224683/article/details/109521023