首页 > 编程语言 > 详细

springcloud ribbon

时间:2020-02-17 22:34:23      阅读:72      评论:0      收藏:0      [点我收藏+]

ribbon简介

负载均衡是指将负载分摊到多个执行单元上,常见的负载均衡有两种方式。 一种是独立进程单元,通过负载均衡策略,将请求转发到不同的执行单元上,例如 Ngnix 。另 一种是将负载均衡逻辑以代码的形式封装到务消费者的客户端上,服务消费者客户端维护了 一份服务提供的信息列 ,有了信息列表,通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。Ribbon Netflix 公司开源的 一个负载均衡的组件,属于上述的第 种方式,是将负载均衡逻辑封装在客户端中,并且运行在客户端的进程里。 Ribbon 是一个经过了云端测试的 IPC库,司以很好地控制 HTT TCP 客户端的负载均衡行为。Spring Cloud 构建的微服务系统中, Ribbon 作为服务消费者的负载均衡器,有两种使用方式, 一种是和 RestTemplate 相结合,另一 种是和 Feign 相结合。Feign 已经默认集成了 Ribbon。
 

restTemplate和ribbon结合消费服务

新建一个模块 eureka-ribbon-client模块:如图

技术分享图片

引入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>

 

配置文件配置

配置文件application.yml 配置信息

spring:
  application:
    name: eureka-ribbon-client
server:
  port: 8765

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

在启动类上添加注解

在启动类上添加 注解,@EnableEurekaClient

使用

a)添加负载均衡类 RibbonConfig

@Configuration
public class RibbonConfig {

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

 

b)添加ribbon服务类RibbonService,使用时直接调用即可

@Service
public class RibbonService {

    @Autowired
    RestTemplate restTemplate;

    public String hi(String name) {
        return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
    }
}

 

c)使用

@RestController
public class RibbonController {

    @Autowired
    RibbonService ribbonService;
    @GetMapping("/hi")
    public String hi(@RequestParam(required = false,defaultValue = "forezp") String name){
        return ribbonService.hi(name);
    }

    @Autowired
    private LoadBalancerClient loadBalancer;

    @GetMapping("/testRibbon")
    public String  testRibbon() {
        ServiceInstance instance = loadBalancer.choose("eureka-client");
      //  URI uri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
        return instance.getHost()+":"+instance.getPort();
    }
}

 

d)测试

分别启动两次eureka-client实例,端口分别为8763,8764

在浏览器输入http://localhost:8765/hi ,轮循执行eureka-client实例的请求

技术分享图片

feign和ribbon结合消费服务

新建eureka-feign-client模块:如下图

技术分享图片

引入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-httpclient</artifactId>
            <version>RELEASE</version>
        </dependency>

 

配置文件配置

spring:
  application:
    name: eureka-feign-client
server:
  port: 8766

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

 

在启动类上添加注解

@EnableEurekaClient
@EnableFeignClients

 

使用

 a)新建feign请求失败重试策略类 FeignConfig

@Configuration
public class FeignConfig {
    @Bean
    public Retryer feignRetryer() {
        return new Retryer.Default(100, SECONDS.toMillis(1), 5);
    }

}

 

b)新建调用服务的声明式接口类 EurekaClientFeign

@FeignClient(value = "eureka-client",configuration = FeignConfig.class)
public interface EurekaClientFeign {
    @GetMapping(value = "/hi")
    String sayHiFromClientEureka(@RequestParam(value = "name") String name);
}

 

c)新建调用声明式接口服务类 HiService

@Service
public class HiService {

    @Autowired
    EurekaClientFeign eurekaClientFeign;
    public String sayHi(String name){
        return  eurekaClientFeign.sayHiFromClientEureka(name);
    }
}

 

d)使用

@RestController
public class HiController {
    @Autowired
    HiService hiService;
    @GetMapping("/hi")
    public String sayHi(@RequestParam( defaultValue = "forezp",required = false)String name){
        return hiService.sayHi(name);
    }
}

 

f)测试

分别启动两次eureka-client实例,端口分别为8763,8764

在浏览器输入http://localhost:8766/hi ,轮循执行eureka-client实例的请求

技术分享图片

 

springcloud ribbon

原文:https://www.cnblogs.com/tanouou/p/12323854.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!