1、项目模块介绍

2、 父项目

主要依赖 spring-cloud 的 版本控制

<properties>
<!-- springCloud 版本 -->
<scd.version>Dalston.SR4</scd.version>
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${scd.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

3、 eureka 模块

3.1 主要依赖

<!--   eureka 注册中心 依赖     -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

3.2 配置信息

# 端口
server:
port: 8096 # 服务名
spring:
application:
name: edocmall-eureka # eureka 服务注册与发现 配置
eureka:
client:
#Eureka 监控页面
service-url:
defaultZone: http://127.0.0.1:${server.port}/eureka
register-with-eureka: false # 是否注册自己的服务到注册中心,默认为true
on-demand-update-status-change: false # 是否主动拉取其他注册的服务信息,默认也是true

3.3 主启动类上的注解

@EnableEurekaServer //eureka服务端启动,可以就接受别人来注册

3.4 测试 访问

启动项目,访问 http://localhost:8096

4、server 服务提供模块

4.1 主要依赖

<!--   eureka 客户端依赖     -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

4.2 配置信息

# 端口
server:
port: 8097 # 服务名配置,eureka注册信息,服务调用基于服务名,必须增加
spring:
application:
name: edocmall-server
#数据源配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/kh96_springboot_edocbd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: root
password: root # mybatis-plus 配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # eureka 注册中心的配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8096/eureka # 注册中心的地址
# 关闭自我保护机制,保证不可用的服务及时剔除
server:
enable-self-preservation: false

4.3 代码介绍

4.4 主启动类上的注解

@MapperScan("com.kgc.scd.mapper")
@EnableEurekaClient // 开启 eureka 服务注册,将此服务注册到 eureka中

4.5 请求测试

服务提供端的请求最好先单独测试一下,成功后再进行远程调用;

5、 web 服务消费模块

5.1 使用restTemplate 调用

5.1.1 主启动类 向容器中放入 restTemplate

@SpringBootApplication
public class Edocmall96WebApplication { public static void main(String[] args) {
SpringApplication.run(Edocmall96WebApplication.class, args);
} //往容器中添加 restTemplate
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
} }

5.1.2 请求中直接调用具体url下的请求

@RestController
public class WebEntryController { @Autowired
private RestTemplate restTemplate; // 根据文档编号,获取文档详情
@GetMapping("/entryById")
public RequestResult<EdocEntryVO> entryDetail(Integer id){
log.info("------ 根据文档编号:{},获取文档详情 ------",id); //模拟发送http请求请求server端,获取文档详情
//弊端:消费端,必须在程序内,记录提供者的ip地址,如果地址出现变更,还需要计时更新,如果服务者有多个及其,无法实现负载均衡
EdocEntryVO edocEntryVO = restTemplate.getForObject("http://127.0.0.1:8097/entry?id="+id,EdocEntryVO.class); return ResultBuildUtil.success(edocEntryVO); } }

5.1.3 请求测试

5.2 使用 feign 远程调用

5.2.1 主要依赖

<!--   eureka 客户端依赖     -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency> <!-- feign远程调用依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>

5.2.2 配置信息

# 端口
server:
port: 8098 spring:
application:
name: edocmall-web
# 服务名 # eureka 注册中心的配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8096/eureka
# 关闭自我保护机制,保证不可用的服务及时剔除
server:
enable-self-preservation: false # 开启客户端服务降级,默认是关闭的恶,需要打开
feign:
hystrix:
enabled: true

5.2.3 代码介绍

5.2.3.1 业务层接口
//指定服务名
@FeignClient(value = "edocmall-server")
public interface WebEntryService {
//基于feign 远程调用edoc-server服务端提供的查询文档详情接口
@GetMapping("/entry") //必须跟远程请求一直
EdocEntryVO invokeEntryServiceUserFeign(@RequestParam("id") Integer id); //必须写 @RequestParam("id")
// 注意 一点更要写 @RequestParam("id") 里面的参数必须写 }
5.2.3.1 控制层之直接调用接口
@RestController
public class WebEntryController { @Autowired
private WebEntryService webEntryService; // 根据文档编号,获取文档详情
@GetMapping("/entryById")
public RequestResult<EdocEntryVO> entryDetail(Integer id){
log.info("------ 根据文档编号:{},获取文档详情 ------",id); //基于feign 远程调用服务端接口,获取文档详情
EdocEntryVO edocEntryVO = webEntryService.invokeEntryServiceUserFeign(id); return ResultBuildUtil.success(edocEntryVO); } }

5.2.4 主启动类上的注解

@EnableEurekaClient  // 开启 eureka 服务注册,将此服务注册到 eureka中
@EnableFeignClients //开启 feign 远程调用服务

5.2.5 请求测试

eureka 注册中心:

feign远程调用:

6、Feign的服务降级与熔断

6.1 服务降级(服务消费端)

6.1.1 依赖

由于feign中有hystrix的依赖,所以不用单独添加;

6.1.2 接口指定服务降级后的实现类

@FeignClient(value = "edocmall-server",fallback = WebEntryServiceImpl.class) //fallback 指定调用失败后 降级调用的数据
public interface WebEntryService {
......
}

6.1.3 实现类,具体降级服务操作

@Service
public class WebEntryServiceImpl implements WebEntryService { @Override
public EdocEntryVO invokeEntryServiceUserFeign(Integer id) {
//此方法,就是regn远程调用,触发服务剪辑的默认实现,正常请求不会调用
//只用远程 feign调用失败,才会调用
EdocEntryVO edocEntryVO = new EdocEntryVO();
edocEntryVO.setId(999);
edocEntryVO.setCid(0);
edocEntryVO.setTitle("触发熔断服务降级");
edocEntryVO.setSummary("当feign远程调用接口失败,默的默认实现");
edocEntryVO.setUploadUser("feign-hystrix");
edocEntryVO.setCreateDate(new Date()); return edocEntryVO;
}

6.1.4 测试

6.1.4.1 不添加服务降级时

6.1.4.2 添加服务降级后

6.2 服务熔断(服务提供端)

6.2.1 依赖

<!--导入Hystrix依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

6.2.2 熔断 备选方法 和 熔断触发条件

@Slf4j
@RestController
public class EntryController { @Autowired
private EntryService entryService; //根据 id 查询文档详情
@GetMapping("/entry")
@HystrixCommand(fallbackMethod = "fallbackStoryDetail") //指定 服务熔断后的备选方法
public EdocEntryVO entryDetail(@RequestParam Integer id){
log.info("------ 根据文档编号:{},获取文档详情 ------",id); EdocEntryVO edocEntry = entryService.getEdocEntryById(id); if (edocEntry == null){
//抛出异常,触发 熔断 备选方法
throw new RuntimeException("id为:"+id+"的用户不存在,触发服务熔断");
} return edocEntry; } // 根据 id 查询文档详情 方法 服务熔断后 的备选方案
public EdocEntryVO fallbackStoryDetail(@RequestParam Integer id){
//此方法,只用服务熔断时,才会被调用
EdocEntryVO edocEntryVO = new EdocEntryVO();
edocEntryVO.setId(999);
edocEntryVO.setCid(0);
edocEntryVO.setTitle("根据 id 查询文档详情 方法 服务熔断后 的备选方案");
edocEntryVO.setSummary("当根据id 查询不到具体用户信息时,就会触发");
edocEntryVO.setUploadUser("hystrix");
edocEntryVO.setCreateDate(new Date()); return edocEntryVO;
} }

6.2.3 主启动类上的注解

@EnableHystrix //开启熔断服务 旧的开启服务熔断注解: @EnableCircuitBreaker

6.2.4 测试

6.2.4.1 没有服务降级,也没有服务熔断 时

直接返回错误;

6.2.4.2 有服务降级,没有服务熔断 时

触发服务降级;

6.2.4.3 有服务降级,也有服务熔断 时

触发服务熔断;

SpringCloud(二) - Eureka注册中心,feign远程调用,hystrix降级和熔断的更多相关文章

  1. springcloud(二):注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  2. SpringCloud之Eureka注册中心原理及其搭建

    一.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCl ...

  3. SpringCloud之eureka注册中心入门

    eureka注册中心 一.基本概念 SpringCloud封装 了Netflix公司的eureka作为自己微服务的注册中心.这个注册中心和dubbo中的zookeeper很相似,简单来说,只要你可以将 ...

  4. SpringCloud(一)Eureka注册中心

    Eureka简介 Eureka作为注册中心,管理各种服务功能包括服务的注册.发现.熔断.负载.降级等 Eureka注册中心实例 Eureka Server 1.pom文件配置SpringBoot.Sp ...

  5. F版本SpringCloud 4—Eureka注册中心开发和客户端开发

    源码地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials 前言 通过前三篇文章,用大白话介绍了微服务和SpringCloud以及服务治理相关的概 ...

  6. springcloud之Eureka注册中心

    参考博客:https://www.cnblogs.com/ityouknow/p/6854805.html 背景: Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Ser ...

  7. Spring-Cloud之Eureka注册中心环境搭建(单节点)

    一 Eureka概述 服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时会register到服务治理中心. 注册完成后会从服务治理中心拉取所有的服务信息,缓存在本地. 之后服务会 ...

  8. springCloud 之 Eureka注册中心高可用配置

    springCloud的eureka高可用配置方案思路是:几个服务中心之间相互注册,比如两个注册中心,A注册到B上,B注册到A上,如果是三个注册中心则是:A注册到BC上,B注册到AC上,C注册到AB上 ...

  9. springcloud基础-eureka(注册中心)案例

    一.新建项目,取名eureka-server pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...

随机推荐

  1. 羽夏看Linux内核——引导启动(上)

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...

  2. 总结-DSU ON TREE(树上启发式合并)

    考试遇到一道题: 有一棵n个点的有根树,每个点有一个颜色,每次询问给定一个点\(u\)和一个数\(k\),询问\(u\)子是多少个不同颜色节点的\(k\)级祖先.n<=500000. 显然对每一 ...

  3. Spring Boot部署方法

    Spring Boot部署方法     网上搜到的部署方法无非是打成jar包,然后shell执行nohup java调用jar命令,或者是打成war包然后部署到tomcat或者jetty容器上面. S ...

  4. 从零搭建云原生技术kubernetes(K8S)环境-通过kubesPhere的AllInOne方式

    前言 k8s云原生搭建,步骤有点多,但通过kubesphere,可以快速搭建k8s环境,同时有一个以 Kubernetes 为内核的云原生分布式操作系统-kubesphere,本文将从零开始进行kub ...

  5. Flutter 开启 Windows、macOS 平台支持的命令

    Flutter 的多平台支持除了 Android 和 iOS 是默认开启的以外,比如 Windows.Linux 平台的支持需要手动开启. Flutter config 命令集中,有以下参数是对于平台 ...

  6. xray+awvs的联动

    前言:xray是一款强大的漏扫工具,配合awvs的爬站功能可以十分轻松实现全自动挖洞,这里awvs我是使用的是12版本 1.启动xray,监听本地指定端口,这里我监听的是2222端口 命令:xray_ ...

  7. C语言重定向输入:txt文件内容是中文,重定向输入显示乱码的原因

    一.txt文件中的内容是中文,重定向输入显示乱码原因: 是因为文本文件的编码和和编译器的不一致导致的.我文本文件用的编码是UTF-8,而编译器是ANSI,不匹配,所以输出乱码.文本另存为时把编码改为A ...

  8. 「题解报告」P7301 【[USACO21JAN] Spaced Out S】

    原题传送门 神奇的5分算法:直接输出样例. 20分算法 直接把每个点是否有牛的状态DFS一遍同时判断是否合法,时间复杂度约为\(O(2^{n^2})\)(因为有判断合法的剪枝所以会比这个低).而在前四 ...

  9. Linux之主从数据库(1+X)

    主从数据库搭建 改主机名 配置网络 配置yum源(下载mysql) 写域名解析文件 主从同步:(备份,负载(读)) 第一步:数据库的初始化,修改配置文件,定义server-id(所有节点),开启二进制 ...

  10. 记一次Linux光盘救援

    最近遇到一个zz把/etc/profile改坏了导致系统起不来,所以复习一下光盘救援 工具:vm-workstation,centos6 原系统盘起不来后,插入有救援工具的系统盘后 按照提示进入she ...