博客
关于我
Spring Cloud Ribbon
阅读量:676 次
发布时间:2019-03-17

本文共 3684 字,大约阅读时间需要 12 分钟。

Ribbon 服务消费者

1.1 RestTemplate

Ribbon对RestTemplate进行了封装,提供负载均衡和重试功能。RestTemplate是Spring Boot提供的一个远程调用工具,可以执行GET和POST等请求。

RestTemplate 的方法

  • getForObject("url", 转换类型, 提交的参数)
  • `postForObject("url", 协议体数据, 转换类型)"

修改 sp06-ribbon 项目

  • 新建项目

    • 项目名称:sp06-ribbon
    • 依赖项:
      • spring-boot-starter-parent
      • spring-boot-starter-web
      • spring-cloud-starter-netflix-eureka-client
      • sp01-commons
  • application.yml

    spring:  application:    name: ribbon    server:      port: 3001  eureka:    client:      service-url:        defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
  • 主程序

    • 添加 @EnableDiscoveryClient 注解
    • 创建 RestTemplate 实例
  • 1.2 RibbonController

    @RestControllerpublic class RibbonController {    @Autowired    private RestTemplate rt;    @GetMapping("/item-service/{orderId}")    public JsonResult getItem(@PathVariable String orderId) {        return rt.getForObject("http://item-service/{1}", JsonResult.class, orderId);    }    @PostMapping("/item-service/decreaseNumber")    public JsonResult decreaseNumber(@RequestBody List
    items) { return rt.postForObject("http://item-service/decreaseNumber", items, JsonResult.class); } @GetMapping("/user-service/{userId}") public JsonResult getUser(@PathVariable Integer userId) { return rt.getForObject("http://user-service/{1}", JsonResult.class, userId); } @GetMapping("/user-service/{userId}/score") public JsonResult addScore(@PathVariable Integer userId, Integer score) { return rt.getForObject("http://user-service/{1}/score?score={2}", JsonResult.class, userId, score); } @GetMapping("/order-service/{orderId}") public JsonResult getOrder(@PathVariable String orderId) { return rt.getForObject("http://order-service/{1}", JsonResult.class, orderId); } @GetMapping("/order-service") public JsonResult addOrder() { return rt.getForObject("http://order-service/", JsonResponse.class); }}

    1.3 启动服务并测试

    • 项目启动

      mvn spring-boot:run
    • 访问测试

      • http://eureka1:2001
      • http://localhost:3001/item-service/decreaseNumber
      • 使用 Postman Sending POST 请求,请求体为 [{"id":1, "name":"abc", "number":23},{"id":2, "name":"def", "number":11}]

    2.1 Ribbon 负载均衡

    修改项目

  • 添加 ripple 依赖

    org.springframework.cloud
    spring-cloud-starter-netflix-ribbon
  • 在主程序中加 @LoadBalanced 注解

  • 访问路径改为服务ID

  • 2.2 Ribbon 重试

  • 添加 retry 依赖

    org.springframework.retry
    spring-retry
  • 在 application.yml 配置重试参数

    spring:  application:    name: ribbon    server:      port: 3001  eureka:    client:      service-url:        defaultZone: http://eureka1:2001/eureka, http://eura2:2002/eureka      ribbon:        MaxAutoRetries: 1        MaxAutoRetriesNextServer: 2        OkToRetryOnAllOperations: true
  • 设置超时时间

    @Beanpublic RestTemplate getRestTemplate() {    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();    factory.setConnectTimeout(1000);    factory.setReadTimeout(1000);    return new RestTemplate(factory);}
  • 修改 ItemController 添加延迟

    @Slf4j@RestControllerpublic class ItemController {    @Autowired    private ItemService itemService;    @Value("${server.port}")    private int port;    @GetMapping("/{orderId}")    public JsonResult getItem(@PathVariable String orderId) throws Exception {        log.info("server.port = {}, orderId = {}", port, orderId);        if (Math.random() < 0.6) {            log.info("temp sleep: {}", new Random().nextInt(5000));            Thread.sleep(new Random().nextInt(5000));        }        List
    items = itemService.getItems(orderId); return JsonResult.ok(items); }}
  • 测试

    • 负载均衡测试
      • 同时访问 http://localhost:3001/item-service/decreaseNumber
    • 重试测试
      • ItemService 降低响应速度,测试Ribbon的自动重试能力

    转载地址:http://fxwhz.baihongyu.com/

    你可能感兴趣的文章
    msf
    查看>>
    MSP430F149学习之路——SPI
    查看>>
    msp430入门编程45
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>
    MTCNN 人脸检测
    查看>>
    MyEcplise中SpringBoot怎样定制启动banner?
    查看>>