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基于客户端的,所以别忘记加入注册中心哦

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗罗的1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值