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. BZOJ4580/Luogu3147 [Usaco2016 Open]248

    amazing #include <iostream> #include <cstdio> #include <cstring> #include <algo ...

  2. 解决zlibrary注册后,再次登录提示密码错误的问题

    很多小伙伴注册后,再登录提示电子邮件或密码错误,但是可以确认账号密码都是正确的,这种应该怎么处理呢? 其实这种问题有两种处理方式, 首先使用 https://find.looks.wang/ 检测可以 ...

  3. 字节跳动端智能工程链路 Pitaya 的架构设计

    Client AI 是字节跳动产研架构下属的端智能团队,负责端智能 AI 框架和平台的建设,也负责模型和算法的研发,为字节跳动开拓端上智能新场景.本文介绍的 Pitaya 是由字节跳动的 Client ...

  4. 7个自定义定时任务并发送消息至邮箱或企业微信案例(crontab和at)

    前言 更好熟悉掌握at.crontab定时自定义任务用法. 实验at.crontab定时自定义任务运用场景案例. 作业.笔记需要. 定时计划任务相关命令及配置文件简要说明 at 工具 由包 at 提供 ...

  5. 踩坑 Windows 服务来宿主 .NET 程序

    本文所指的 .NET 程序为 .NET6 的程序.因为 .NET 的版本更新很快,所以方式.方法也有变化,所以网上搜到的方法有些也过时了.以下是最近我实践下来的一点心得(坑). 上一篇说到 不安装运行 ...

  6. Helm安装ingress-nginx-4.0.19

    Application version 1.1.3 Chart version 4.0.19 获取chart包 helm fetch ingress-nginx/ingress-nginx --ver ...

  7. Vmware虚拟主机访问外网设置

    本手册使用10.4.7.0/24网段 重点在于虚拟主机的网关和宿主机上的Vmnet8的IP和虚拟网络编辑器的NET网关保持一致 1.设置宿主机网络适配器 选择允许Vmware网络共享 配置VMnet8 ...

  8. PostgreSQL 涉及复杂视图查询的优化案例

    一.前言 对于含有union , group by 等的视图,我们称之为复杂视图. 这类的视图会影响优化器对于视图的提升,也就是视图无法与父查询进行合并,从而影响访问路径.连接方法.连接顺序等.本文通 ...

  9. KingbaseES R6 集群物理copy方式手工添加新备库节点

    案例说明: 对于主库数据量比较大的环境,在添加新节点是可以采用在线clone方式创建新的备库节点,也可以在离线的状态下,直接拷贝其中一个备库的所有集群相关目录来创建新的备库节点.本案例介绍了通过离线物 ...

  10. kingbaseES R3 集群备库转换为单实例库案例

    案例说明: 在生产环境需要将集群中架构转换为单实例环境,本案例以备库转换为单实例库为案例,介绍了两种方案,一种在数据库数据量小的环境下采用 sys_dumpall 导出导入方式建立单实例库:另外一种是 ...