IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringCloud之Ribbon路由、负载和熔断 -> 正文阅读

[Java知识库]SpringCloud之Ribbon路由、负载和熔断

1.服务ribbon-ha

在这里插入图片描述
application.yml

server:
  port: 8092

spring:
  application:
    name: ribbon-ha

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

注入RestTemplate实现请求转发

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

对外提供接口

@RestController
public class HaController {

    @Autowired
    private HaService haService;

    @Value("${server.port}")
    private String port;

    @GetMapping("hello")
    public String hello(@RequestParam String name) {
        return "ha," + name + " ! " + "访问端口号:" + port;
    }

    @GetMapping("ha")
    public String ha(@RequestParam String name) {
        return haService.callHi(name);
    }
}
@Service
public class HaService {

    @Autowired
    private RestTemplate restTemplate;

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

2.服务ribbon-hi

在这里插入图片描述
application.yml

server:
  port: 8093

spring:
  application:
    name: ribbon-hi

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8088/eureka/
@RestController
public class HiController {

    @Autowired
    private HiService hiService;

    @Value("${server.port}")
    private String port;

    @GetMapping("hello")
    public String hello(@RequestParam String name) {
        return "hi," + name + " ! " + "访问端口号:" + port;
    }

    @GetMapping("hi")
    public String hi(@RequestParam String name) {
        return hiService.callHa(name);
    }
}
@Service
public class HiService {

    @Autowired
    private RestTemplate restTemplate;

    public String callHa(String name) {
        return restTemplate.getForObject("http://ribbon-ha/hello?name=" + name, String.class);
    }
}

3.路由转发

依次启动 eureka、ribbon-ha、ribbon-hi
在这里插入图片描述
访问
http://localhost:8092/hello?name=yzm
http://localhost:8093/hello?name=yzm
在这里插入图片描述
在这里插入图片描述
http://localhost:8092/ha?name=yzm
http://localhost:8093/hi?name=yzm
在这里插入图片描述
在这里插入图片描述
看得出8092的ha请求被转发到8093去了
看得出8093的hi请求被转发到8092去了

4.负载均衡

再启动一个ribbon-hi:18093服务
在这里插入图片描述
一直刷新访问
http://localhost:8092/ha?name=yzm
在这里插入图片描述
8092的请求以轮询的方式,分发给8093和18093

5.熔断降级

把8093、18093服务都关闭了
访问:http://localhost:8092/ha?name=yzm
在这里插入图片描述
直接显示错误信息不够友好又或者需要记录日志信息之类的,这个时候就可以进行熔断处理。

需要添加Hystrix依赖

        <!-- 熔断 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

在启动类上加注解:@EnableHystrix 开启熔断降级功能

在这里插入图片描述

修改service

通过@HystrixCommand指定转发失败后,回调haError()方法

@Service
public class HaService {

    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "haError")
    public String callHi(String name) {
        return restTemplate.getForObject("http://ribbon-hi/hello?name=" + name, String.class);
    }

    public String haError(String name) {
        return "ha," + name + " , ribbon-hi 服务挂了!";
    }
}
@Service
public class HiService {

    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "hiError")
    public String callHa(String name) {
        return restTemplate.getForObject("http://ribbon-ha/hello?name=" + name, String.class);
    }

    public String hiError(String name) {
        return "hi," + name + " , ribbon-ha 服务挂了!";
    }
}

重新启动8092、8093
正常访问:http://localhost:8092/ha?name=yzm在这里插入图片描述
关闭8093后再次访问
在这里插入图片描述

相关链接

首页
上一篇:服务注册
下一篇:Feign

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:18:55  更:2022-03-15 22:19:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:51:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码