微服务 @SentinelResource 服务网关

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 微服务 @SentinelResource 服务网关


@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:在转发请求之前,将拦截到的路径的第一层路径删除掉

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
9天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
1月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2024 年 9 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 9 月产品动态。
|
1月前
|
安全 5G 网络性能优化
|
7天前
|
负载均衡 监控 API
dotnet微服务之API网关Ocelot
Ocelot 是一个基于 .NET 的 API 网关,适用于微服务架构。本文介绍了如何创建一个 Web API 项目并使用 Ocelot 进行 API 请求路由、负载均衡等。通过配置 `ocelot.json` 和修改 `Program.cs`,实现对 `GoodApi` 和 `OrderApi` 两个项目的路由管理。最终,通过访问 `https://localhost:7122/good/Hello` 和 `https://localhost:7122/order/Hello` 验证配置成功。
19 1
dotnet微服务之API网关Ocelot
|
15天前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
29 1
Gateway服务网关
|
26天前
|
Kubernetes 负载均衡 Docker
构建高效后端服务:微服务架构的探索与实践
【10月更文挑战第20天】 在数字化时代,后端服务的构建对于任何在线业务的成功至关重要。本文将深入探讨微服务架构的概念、优势以及如何在实际项目中有效实施。我们将从微服务的基本理念出发,逐步解析其在提高系统可维护性、扩展性和敏捷性方面的作用。通过实际案例分析,揭示微服务架构在不同场景下的应用策略和最佳实践。无论你是后端开发新手还是经验丰富的工程师,本文都将为你提供宝贵的见解和实用的指导。
|
10天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
15天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
17天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
39 3
|
17天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
38 2