微服务 @SentinelResource 服务网关

news2024/10/6 21:32:14

微服务 @SentinelResource 服务网关

  • @SentinelResource
  • Feign整合Sentinel
    • 什么场景下需要Feign集合Sentinel呢?
  • 服务网关
    • 为什么需要网关
    • 网关组件
    • Gateway快速入门
      • 什么是Gateway
      • 操作示例
      • 自定义路由规则


@SentinelResource

自定义异常返回是对所有的情况进行统一处理,但针对一些特定的情况我们要单独处理

代码示例:

@RestController
    @Slf4j
    public class AnnoController {
        //设置流控规则 qp=3
        //访问/anno1达到阈值,调用annolBlockHandler方法,并返回内容
        //
        @RequestMapping("/anno1")
        @SentinelResource(value = "anno1",
                          blockHandler = "annoBlockHandles",//当前方法如果被限流或者被降级会调用这个字符串对应的方法
                          fallback = "annoFallback")//当方法出现异常之后,会调用这个字符串对应的方法
        public String anno1(String name){
            if("wolfcode".equals(name)){
                throw new RuntimeException();
            }
            return "anno1";
        }
        public String annoBlockHandles(String name, BlockException ex){
            log.error("{}",ex);
            return "接口被限流或者降级了";
        }
        //Throwable时进入的方法
        public String annoFallback(String name,Throwable throwable){
            log.error("{}",throwable);
            return "接口发生异常了";
        }
    }

blockHandler:当方法如果被限流或者被降级会调用这个字符串对应的方法
falback:当方法出现异常之后,会调用这个字符串对应方法

设置的流控规则 qps=3
访问/anno1 ==>达到阈值,调用anno1BlockHandler方法,并返回内容
在这里插入图片描述
在这里插入图片描述
访问/anno1?name="wolfback"
在这里插入图片描述


Feign整合Sentinel

什么场景下需要Feign集合Sentinel呢?

比如我们在购物的时候,查看商品详情页面的时候,里面包含库存信息,商品详情信息,评论信息,这个需求包含的微服务如下:
假设现在评论服务宕机了,那是不是意味用户发出查看商品请求也无法正常显示了,商品都看不到了,那用户也无法进行下单的操作了.但是对于用户来说,评论看不到并不影响他购物,所以这时候我们应该对评论服务进行及·降级处理,返回一个兜底数据(空数据),这样用户的查看商品请求能正常显示,只是评论数据看不到而已,这样的话,用户的下单请求也不会受到影响.

正常情况下:
在这里插入图片描述
若商品服务挂了:
在这里插入图片描述

解决方案:

创建容错类:

@Component
    public class ProductFeignFallback implements ProductFeignApi {

        @Override
        public Product findByPid(Long pid) {
            System.out.println("返回兜底数据");
            return new Product();
        }
    }

创建feign接口定义容错类

//远程调用服务名称
@FeignClient(name = "product-service",fallback = ProductFeignFallback.class)
    public interface ProductFeignApi {
        @RequestMapping("/product/{pid}")
        Product findByPid(@PathVariable("pid") Long pid);
    }

在shop-order-server项目的配置文件中开启feign对Sentinel的支持

feign:
  sentinel:
    enabled: true

运行结果:

在这里插入图片描述
在这里插入图片描述


服务网关

为什么需要网关

1.记录很多的服务地址
2.在后端微服务做集群的情况下,前端需要进行负载均衡
3.微服务的统一处理逻辑,需要在每个微服务中都实现一次

网关组件

统一请求入口,进行统一逻辑的处理,对后端微服务集群进行负载均衡,网络的隔离

实现步骤

1.网关获取到请求地址,默认截取域名后面的部分请求路径 product-serve
2.拿到路径信息和路由规则进行匹配,可以获取到对应的服务名product-service
3.拿到服务名在本地的缓存列表中找到对应的ip地址
4.进行URL地址拼接 http://192.168.10.110/product/1进行网络的调用

Gateway快速入门

什么是Gateway

Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。它的目标是替代Netflflx Zuul,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控和限流。

操作示例

1.创建一个api-gateway的模块,导入相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>shop-parent</artifactId>
        <groupId>cn.wolfcode</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>api-gateway</artifactId>
    <dependencies>
        <!--gateway网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

</project>

2.编写启动类

@SpringBootApplication
    @EnableDiscoveryClient
    public class ApiGatewayServer {
        public static void main(String[] args) {
            SpringApplication.run(ApiGatewayServer.class,args);
        }
    }

3.编写配置文件

server:
  port: 9000
spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      discovery:
        locator:
          enabled: true #让gateway可以发现nacos中的微服务

测试:

在这里插入图片描述


自定义路由规则

spring:
  application:
    name: api-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.80.131:8848
    gateway:
      discovery:
        locator:
          enabled: true #让gateway可以发现nacos中的微服务
      routes:
      - id: product_route
        uri: lb://product-service
        predicates:
        - Path=/product-serv/**
        filters:
        - StripPrefix=1
      - id: order_route
        uri: lb://order-service
        predicates:
        - Path=/order-serv/**
        filters:
        - StripPrefix=1

id:路由名称,保证唯一
uri: 将符合条件的请求转发到哪个微服务,1b表示对服务进行负载均衡
predicates:拦截那些请求
filters:在转发请求之前,将拦截到的路径的第一层路径删除掉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DTC补货实战:从算法到落地

本文作者&#xff1a;凡飞&#xff0c;从快递到快消&#xff0c;一个平凡的供应链算法深耕者。“ 我希望衡量我们ai团队价值的&#xff0c;不是创造了多么精深的算法&#xff0c;而是跨越算法到落地间距离的能力。”近年来随着电商行业从增量市场逐步成长到了存量市场&#xff…

第二章.神经网络—激活函数

第二章.神经网络 感知机存在如何设置合适的权重问题&#xff0c;神经网络的出现就是为了解决感知机存在的问题&#xff0c;神经网络的一个重要性质&#xff1a;它可以自动的从数据中学习到合适的权重参数。 2.1.从感知机到神经网络 1.神经网络示例 1).示意图&#xff1a; 网络…

《技术领导力:程序员如何才能带团队》 读书笔记

技术管理工作 管理者能力 作为技术团队管理者&#xff0c;无论具体管几个人&#xff0c;最好能够拥有以下能力&#xff0c;才能满足各个需求方提出的需求&#xff1a; 深入理解一门或多门编程语言深入理解多种流行的框架系统架构能力强&#xff0c;拥有复杂系统的设计经验积…

Hystrix高可用框架

Hystrix是什么 Hystrix Home,Hystrix是高可用性保障的一个框架。Netflix的API团队从2011年开始做一些提升系统可用性和稳定性的工作,Hystrix就是从那时候开始发展的。在2012年的时候,Hystrix就变得比较成熟和稳定了,Netflix中除了API团队以外,很多其他的团队都开始使用Hy…

vue2.6.10+vite2开启template模板动态编译

在从vue-cli迁移到vite2的时候&#xff0c;之前在代码中使用的模板编译遇到了问题&#xff1a;我在项目中会根据后台返回的内容动态渲染&#xff0c;如果返回内容中有<el-image>等标签&#xff0c;v-html无法识别非html标签&#xff0c;导致图片渲染失败&#xff0c;因此…

基于Springboot搭建java项目(三十二)—— Docker部署java服务

Docker部署java服务 一、Linux服务安装Docker 关于Docker的安装在之前的Linux的三种安装方式的第三种安装方式中有介绍 传送门&#xff1a;https://blog.csdn.net/m0_46616045/article/details/128841396 二、编写DockerFile 1、将需要部署的Jar包放到服务器上 2、编写Doc…

3.【SpringBoot源码】SpringBoot自动配置原理

目录 一、简介 1)、SpringBootConfiguration 2)、ComponentScan 3)、EnableAutoConfiguration 二、AutoConfigurationPackage 三、Import(AutoConfigurationImportSelector.class) 1)、AutoConfigurationImportSelector介绍 2)、自动配置流程 2-1)、ConfigurationClas…

Vue中数组的列表渲染(v-for渲染数组,数组改变,页面不渲染问题)

1.基本的列表&#xff08;v-for的基本使用&#xff09;&#xff1a; <template><!-- v-for指令:1.用于展示列表数据2.语法&#xff1a;v-for"(item, index) in xxx" :key"yyy"3.可遍历&#xff1a;数组、对象、字符串&#xff08;用的很少&#…

计算机网络基础学习指南(二)

4. HTTP协议 简介 5. Socket 5.1 简介 即套接字&#xff0c;是应用层 与 TCP/IP 协议族通信的中间软件抽象层&#xff0c;表现为一个封装了 TCP / IP协议族 的编程接口&#xff08;API&#xff09; Socket不是一种协议&#xff0c;而是一个编程调用接口&#xff08;API&#…

HashMap源码详细解析

HashMap的继承:HashMap实现了Cloneable接口&#xff0c;所以可以被克隆HashMap实现了Serializable接口&#xff0c;可以被序列化HashMap继承了AbstractMap并实现了Map接口&#xff0c;具有Map接口的所有功能存储结构:JDK1.7(包括1.7)之前HashMap底层是数组链表结合而成的高级数…

【深度学习】ReID相关知识点解析(PCB、BoT、MGN)

PCB(Part-based Convolutional Baseline) RPP结构图: 网络流程: 经过一个backbone得到特征图T。T中的每列向量称为f(1,1,c)。 如:输入(384,128,3)经过backbone降采样16倍后得到特征图T(24,8,c)。 将T从上到下切成p(p=6)片。记为P_i(i=1…p)。——测试时接第…

PMP应该如何备考?掌握着三个步骤

在我这里大概就是有三个点需要注意的&#xff1a; 重点一&#xff0c;好好上课 我选择的是线下培训班&#xff0c;一共是6节线下课&#xff0c;每次线下课都占用了周末一整天的时间。 从早上9点到下午5点&#xff0c;没上课前我觉得应该会蛮累的&#xff0c;但实际上下来其实…

linux 安装mysql服务(超详细)

目录 1、查看是否已经安装了mysql 2、下载官方mysql安装包 3、安装MySQL包 4、安装 MySQL 5、启动 Mysql 服务 6、查看mysql运行状态 7、查看初始密码&#xff08;红色部分为初始密码) 8、进入数据库 1.首先关闭mysql服务 2.然后编辑文件&#xff0c;添加代码 3.新增…

什么是散点图?

在之前的文章中&#xff0c;我已经介绍过堆叠条形图、分组条形图和堆叠面积图&#xff0c;本文介绍一些散点图的百科知识。 散点图&#xff0c;顾名思义就是使用一些散乱的点来展示数据的一种图表&#xff0c;这些点在哪个位置&#xff0c;是由其X值和Y值确定的&#xff0c;因此…

【C++】常量引用(常引用)一些经典问题

常量引用1.常量引用错误的案例2.常量引用的前提条件3.分析错误案例4.总结常量引用1.常量引用错误的案例2.常量引用的前提条件3.分析错误案例4.总结1.常量引用错误的案例 1.常量引用的使用的场景一般是用来修饰函数的形参&#xff0c;防止误操作。 比如&#xff1a; //在下列函数…

HTB_Find The Easy Pass

文章目录信息收集分析汇编代码信息收集 下载后是一个加密的zip压缩包&#xff0c;里面是一个exe文件 解压密码获取&#xff1a; 使用zip2john暴破&#xff0c;失败 zip2john Find\ The\ Easy\ Pass.zip >hash.txt john -w/usr/share/wordlists/rockyou.txt hash.txt使用…

DAMA数据管理知识体系指南之数据开发

第5章 数据开发 数据开发&#xff08;Data Development)是数据管理框架中的第三个数据管理职能它是第二个与数据治理功能交互并受其影响的数据管理职能。 5.1 简介 数据开发是指分析、设计、实施、部署及维护数据解决方案&#xff0c;以使企业的数据资源价值最大化。数据开发…

pytorch backward使用解析

目录前言backward函数官方文档backward理解Jacobian矩阵vector-Jacobian product的计算vector-Jacobian product的例子理解输入和输出为标量或向量时的计算输入为标量&#xff0c;输出为标量输入为标量&#xff0c;输出为向量输入为向量&#xff0c;输出为标量输入为标量&#…

从零编写linux0.11 - 第十章 文件系统(二)

从零编写linux0.11 - 第十章 文件系统&#xff08;二&#xff09; 编程环境&#xff1a;Ubuntu 20.04、gcc-9.4.0 代码仓库&#xff1a;https://gitee.com/AprilSloan/linux0.11-project linux0.11源码下载&#xff08;不能直接编译&#xff0c;需进行修改&#xff09; 本章…

学会这7个常见问题和答案,让你下一次JavaScript面试获得高分

在本文中&#xff0c;我将涵盖您在JavaScript 面试中可能遇到的最常见问题&#xff0c;并提供详细的答案和示例&#xff0c;以帮助您在竞争中脱颖而出。无论您是初学者还是经验丰富的开发人员&#xff0c;本指南都会让您有信心打动面试官并找到工作。1️⃣ 什么是 JavaScript&a…