hystrix微服务部署

目录

一.启动nacos和redis

1.查看是否有nacos和redis

二.开始项目

1.hystrix1工程(修改一下工程的注册名字)

2.运行登录nacos网站查看运行效果(默认密码nacos,nacos)

[3.开启第二个项目 hystrix2工程](#3.开启第二个项目 hystrix2工程)

[4.关闭第二个项目 hystrix2工程 (模拟熔断)](#4.关闭第二个项目 hystrix2工程 (模拟熔断))

三.应用hystrix

1.在第一个工程里hystrix1添加依赖

2.开启Hystrix

3.修改第一个项目hystrix1的工具类Result

4.修改第一个项目hystrix1的控制类

5.修改第一个项目hystrix1的application.yml文件

6.先同时启动两个项目,在postman进行测试

3.6.1连接成功的情况

3.6.2连接失败的情况(提示)

四.添加仪表盘(很少用到,了解)

1.在第一个工程里hystrix1添加依赖

2.添加配置类(固定写法)

3.启动类添加注解@EnableHystrixDashboard

4启动项目,访问如下地址

[​编辑 五.我的项目结构](#编辑 五.我的项目结构)

1.第一个工程hystrix1

2.第一个工程hystrix2


一.启动nacos和redis

1.查看是否有nacos和redis

复制代码
docker ps -a

2.启动nacos和redis

复制代码
docker start nacos
docker start redis-6379
docker ps

二.开始项目

这里用的项目过程在我的另一个博客中OpenFeign微服务部署-CSDN博客

我是粘贴复制后重写的名字,hystrix1对应SpringSessiondemo,hystrix2对应SpringSessiondemo1,

hystrix2工程(没有代码改变)先启动之后断开(模拟宕机),

1.hystrix1工程(修改一下工程的注册名字)

2.运行登录nacos网站查看运行效果(默认密码nacos,nacos)

3.开启第二个项目 hystrix2工程

用postman测试

4.关闭第二个项目 hystrix2工程 (模拟熔断)

三.应用hystrix

1.在第一个工程里hystrix1添加依赖

复制代码
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

2.开启Hystrix

在第一个工程里hystrix1的启动类上添加开启Hystrix的注解

复制代码
@EnableHystrix

此时完成上述两个操作后,再次关闭第二个工程里hystrix2,页面也是报错,但不是"连接超时"的错误,而是"熔断类型"的错误。为了让用户体验度好一些,报错信息不暴露给用户,我们完成下面的编码。

3.修改第一个项目hystrix1的工具类Result

java 复制代码
package com.jr.util;

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

@Data
public class Result {

    private Integer code;

    private String message;

    private Map<String, Object> map = new HashMap<>();

    private Result() {
    }

    public static Result ok() {
        Result r = new Result();
        r.setCode(ResultCode.SUCCESS.getCode());
        r.setMessage(ResultCode.SUCCESS.getMessage());
        return r;
    }

    public static Result error() {
        Result r = new Result();
        r.setCode(ResultCode.ERROR.getCode());
        r.setMessage(ResultCode.ERROR.getMessage());
        return r;
    }
    public Result setMessage(String message) {
        this.message = message;
        return this;
    }

    public Result put(String key, Object value) {
        map.put(key, value);
        return this;
    }

    public Object get(String key) {
        return map.get(key);
    }

}

4.修改第一个项目hystrix1的控制类

java 复制代码
package com.jr.controller;

import com.jr.entry.UserDto;
import com.jr.service.IUserService;
import com.jr.util.Result;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import org.apache.tomcat.jni.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private IUserService userService;

    @GetMapping
    @HystrixCommand(fallbackMethod = "infoHystrix") //一旦熔断了,就去执行infoHystrix方法。
    public Result info() {
        UserDto user = userService.info();
        return Result.ok().put("data", user);
    }

    public Result infoHystrix() {
        return Result.error().setMessage("被熔断了");
    }

    @GetMapping("/{id}")
    public Result id(@PathVariable String id) {  //url传值
        UserDto userDto = userService.id(id);
        return Result.ok().put("data", userDto);
    }


    @PostMapping("/add")
    public Result add(@RequestBody UserDto user) { //对象传值
        UserDto userDto = userService.add(user);
        return Result.ok().put("data", userDto);
    }
}

5.修改第一个项目hystrix1的application.yml文件

向其中添加以下代码

java 复制代码
feign:
  hystrix:
    enabled: true

6.先同时启动两个项目,在postman进行测试

3.6.1连接成功的情况

3.6.2连接失败的情况(提示)

四.添加仪表盘(很少用到,了解)

1.在第一个工程里hystrix1添加依赖

XML 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.添加配置类(固定写法)

java 复制代码
package com.jr.config;

import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.http.HttpServlet;

@Configuration
public class HystrixConfig {

    @Bean
    public ServletRegistrationBean<HttpServlet> httpServletServletRegistrationBean() {
        ServletRegistrationBean<HttpServlet> result = new ServletRegistrationBean<>(new HystrixMetricsStreamServlet());
        result.addUrlMappings("/actuator/hystrix.stream");
        return result;
    }

}

3.启动类添加注解@EnableHystrixDashboard

4启动项目,访问如下地址

地址栏访问的地址:http://localhost:100/hystrix

地址2:http://localhost:100/actuator/hystrix.stream

点击下面的Monitor Stream

一开始建立的时候全是0,我们需要去访问我们的项目

五.我的项目结构

1.第一个工程hystrix1

2.第一个工程hystrix2

相关推荐
dajun1811234567 小时前
PC端中文免费在线跨职能泳道图制作工具
运维·架构·流程图·敏捷流程·交通物流
编程饭碗10 小时前
【DDD架构理解】
架构
叫我阿柒啊10 小时前
从Java全栈到前端框架:一场真实的技术面试对话
java·vue.js·spring boot·微服务·typescript·前端开发·后端开发
好奇的菜鸟10 小时前
Docker 一键启动:打造高效的 Java 微服务开发环境
java·docker·微服务
是你的小橘呀11 小时前
零基础也能懂!React Hooks实战手册:useState/useEffect上手就会,告别类组件
前端·架构
ICT技术最前线12 小时前
企业 ICT 标准化传输架构规范
架构
踏浪无痕12 小时前
JobFlow:时间轮与滑动窗口的实战优化
后端·架构·开源
老前端的功夫15 小时前
TypeScript 类型守卫:从编译原理到高级模式
前端·javascript·架构·typescript
希望_睿智15 小时前
实战设计模式之中介者模式
c++·设计模式·架构
5G全域通16 小时前
面向5G复杂性的下一代运维技术体系:架构、工具与实践
大数据·运维·人工智能·5g·架构