SpringCloud(22):Sentinel对Feign的支持

news2024/11/16 23:33:39

Sentinel 适配了 Feign组件。如果想使用,除了引入 spring-cloud-starter-alibaba-sentinel 的依赖外还需要 2个步骤:

  • 配置文件打开 Sentinel 对 Feign 的支持:feign.sentinel.enabled=true
  • 加入 spring-cloud-starter-openfeign 依赖使 Sentinel starter 中的自动化配置类生效;

案例

需求如下:

实现sentinel_feign_client微服务通过Feign访问sentinel_feign_provider微服务的流量控制

创建sentinel_parent、eureka_server、sentinel_feign_provider、sentinel_feign_client工程,并在sentinel_feign_client中使用feign访问sentinel_feign_provider服务。

提供已经搭建好的微服务代码,地址如下:

https://download.csdn.net/download/u013938578/87767363

1 创建父工程sentinel_parent

在父工程的pom.xml文件中对SpringCloud依赖的进行管理

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2 创建子工程eureka_server工程,作为注册中心

2.1 在pom.xml文件中引入依赖

<dependencies>
    <!--eureka服务端依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

2.2 引导类中添加Eureka的服务注解

//声明当前应用是Eureka注册中心服务
@EnableEurekaServer
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.3 配置文件配置eureka

#设置服务端口
server:
  port: 9010

#设置eureka服务的名称
spring:
  application:
    name: eureka-server

#eureka配置
eureka:
  client:
    service-url:
      # eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址
      defaultZone: http://127.0.0.1:9010/eureka
    # 不注册自己
    register-with-eureka: false
    # 不拉取服务
    fetch-registry: false

2.4 运行测试

启动项目,通过浏览器访问http://127.0.0.1:9010/,如果能看到如下界面就说明eureka注册中心已经配置成功

 

3 创建子工程sentinel_feign_provider,作为服务的提供方

3.1 在pom.xml文件中引入依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

3.2 引导类中添加Eureka客户端注解

@EnableEurekaClient  //开启Eureka客户端发现功能
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3.3 在application.yml文件中进行配置

#tomcat端口
server:
  port: 9011

#应用的名称
spring:
  application:
    name: sentinel-feign-provider

#eureka的配置
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9010/eureka  #要注册到的注册中心的地址

3.4 创建controller,方便sentinel_feign_client进行调用

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController {

    @GetMapping("hello")
    public String hello(){
        return "Hello Sentinel!";
    }

}

3.5 运行测试

启动项目,查看项目是否注册到eureka注册中心中

 

浏览器输入http://localhost:9011/hello,查看是否能访问成功。

 

4 创建子工程sentinel_feign_client

4.1 在pom.xml文件中引入依赖

项目中要使用Fegin来进行访问sentinel_fegin_provider微服务,所以需要额外引入spring-cloud-starter-openfeign依赖,整合sentinel还需要引入spring-cloud-starter-alibaba-sentinel依赖。

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <!--feign的起步依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

4.2 引导类中添加Eureka客户端注解

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableEurekaClient  //开启Eureka客户端发现功能
@SpringBootApplication
@EnableFeignClients
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4.3 在application.yml文件中进行配置

在application.yml文件中要专门开启 Sentinel 对 Feign 的支持。

#tomcat端口
server:
  port: 9012

#应用的名称
spring:
  application:
    name: sentinel-feign-client
  cloud:
    sentinel:
      transport:
        dashboard: localhost:9000

#eureka的配置
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:9010/eureka  #要注册到的注册中心的地址


4.4 创建Feign代理接口

package com.example.demo.agent;

import com.example.demo.service.FallbackService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(value="sentinel-feign-provider")
public interface FeignAgent {
    @GetMapping("/hello")
    String hello();
}

4.5 创建controller,使用Feign访问sentinel_feign_provider微服务。

package com.example.demo.controller;

import com.example.demo.agent.FeignAgent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private FeignAgent feignAgent;

    @GetMapping("hello")
    public String hello(){
        return feignAgent.hello();
    }
}

4.6.运行测试

启动项目,查看项目是否注册到eureka注册中心中。

浏览器输入http://localhost:9012/hello,查看是否能访问成功。

 

 

5 整合sentinel

5.1 在sentinel_feign_client工程的pom.xml中引入Spring Cloud Alibaba Sentinel依赖

        <!--Spring Cloud Alibaba Sentinel依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

5.2 在application.yml中开启Sentinel对Feign的支持

#应用的名称
spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:9000


# sentinel对feign支持操作
feign:
  sentinel:
    enabled: true

5.3 创建FallbackService,作为流控降级回调类,并在FeignAgent进行流控降级回调配置

package com.example.demo.service;

import com.example.demo.agent.FeignAgent;
import org.springframework.stereotype.Component;

//限流或者降级的回调类
@Component
public class FallbackService implements FeignAgent {
    //限流和降级的处理
    @Override
    public String hello() {
        return "系统繁忙,请稍候";
    }
}

修改FeignAgent

 

package com.example.demo.agent;

        import com.example.demo.service.FallbackService;
        import org.springframework.cloud.openfeign.FeignClient;
        import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(value="sentinel-feign-provider",fallback = FallbackService.class)
public interface FeignAgent {
    @GetMapping("/hello")
    String hello();
}

5.4 运行测试

启动项目,在Sentinel控制中增加关于资源的流控规则,Sentinel和Feign整合时,流控规则的编写形式为:http请求方式:协议://服务名/请求路径跟参数,例如:GET:http://sentinel-feign-provider/hello。

 

 通过浏览器输入http://localhost:9012/hello,慢速刷新,则持续显示”Hello Sentinel”;快速刷新则会交替出现”Hello Sentinel”和“系统繁忙,请稍候”。这说明对资源限流成功。

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

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

相关文章

springboot 整合redis

第一步&#xff1a;pom.xml文件导入坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.5.4</version> </dependency 第二步&#xff1a;appli…

【iOS】—— NSProxy类

NSProxy 文章目录 NSProxyNSProxy简介NSProxy模拟多继承NSProxy 避免NSTimer循环引用 在学消息转发的时候看到过这个类&#xff0c;本来没打算细看&#xff0c;后来看学长博客循环引用的时候也看到了这个类&#xff0c;就来细看看。 NSProxy简介 NSProxy 是一个实现了 NSObjec…

在线病毒分析工具评测试用

总览 1 区分在线杀毒引擎与在线沙盒 在线杀毒引擎用的大多是国际上出名的杀毒厂商的引擎作为底层&#xff0c;对文件进行扫描&#xff0c;结论通常会反馈“无毒”或者杀毒引擎自己的代码。 在线沙盒用云端的机器跑一次程序&#xff0c;然后收集程序的相关信息。 两者各有与…

情感分析讲解

情感分析简述 情感分析(Sentiment Analysis)又称倾向性分析&#xff0c;或意见挖掘&#xff0c;它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。利用情感分析能力&#xff0c;可以针对带有主观描述的自然语言文本&#xff0c;自动判断该文本的情感正负倾向…

MongoDB 聚合操作Map-Reduce

这此之前已经对MongoDB中的一些聚合操作进行了详细的介绍&#xff0c;主要介绍了聚合方法和聚合管道&#xff1b;如果您想对聚合方法和聚合管道进行了解&#xff0c;可以参考&#xff1a; MongoDB 数据库操作汇总https://blog.csdn.net/m1729339749/article/details/130086022…

ClickHouse为何能超越Elasticsearch?

背景 Elasticsearch是一个强大的分布式全文检索和数据分析引擎&#xff0c;也是日志分析系统经常使用的一种实现方案&#xff0c;但近年来随着ClickHouse的发展&#xff0c;Elasticsearch在日志分析领域的地位逐渐被取代&#xff0c;许多公司已经将自己的日志分析解决方案从ES…

games101作业1

作业1的大致要求就是让我们实现如下两个函数&#xff0c;一个是返回在三维空间中绕着Z轴旋转的矩阵&#xff0c;另一个是返回投影矩阵。正确完成这两个函数之后&#xff0c;运行代码你就会在窗口中看到一个三角形&#xff0c;并且按a键和d键会发生旋转。 首先来实现get_model_m…

RuleApp1.4.0 文章社区客户端

简介&#xff1a; 可以打包成安卓&#xff0c;苹果&#xff0c;h5&#xff0c;小程序&#xff0c;全新的版本增加了私聊和群聊&#xff0c;动态模块等&#xff0c;还有自动和手动封禁机制。[滑稽][滑稽]主要模块&#xff1a;用户模块&#xff0c;文章模块&#xff0c;动态模块…

国产服务器tomcat开机自启

目录结构 前言方法一方法二方法三参考连接 前言 国产服务器配置tomcat开机自启动&#xff1b;目前测试两种服务器 银河麒麟&#xff08;Linux localhost.localdomain 4.19.90-52.22.v2207.ky10.x86_64 #1 SMP Tue Mar 14 12:19:10 CST 2023 x86_64 x86_64 x86_64 GNU/Linux&am…

多模态速读:ViLT、ALBEF、VLMO、BLIP

ViLT : Vision-and-Language Transformer Without Convolution or Region Supervision ViLT : Vision-and-Language Transformer Without Convolution or Region SupervisionIntroductionApproach参考 ALBEF: Vision and LanguageRepresentation Learning with Momentum Distil…

如何在香港服务器上进行网站迁移?五个主要步骤

​  服务器迁移是将大量关键信息从一台服务器移动到另一台服务器的过程&#xff0c;同时确保新服务器已正确配置以承载这些新信息。对于业务涉及中国大陆、香港及亚太区地区往来的用户&#xff0c;您可能需要将网站迁移到香港服务器上&#xff0c;来更好地发展业务。香港服务…

【c语言】字符串常用函数组件化封装 | 字符串总结

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

【JavaScript】9.事件

事件 1. 注册事件&#xff08;绑定事件&#xff09; 给元素添加事件&#xff0c;称为注册事件或者绑定事件 1.1 注册事件两种方式 传统注册方式&#xff08;onclick&#xff09; 传统方式注册事件特点&#xff1a; 注册事件的唯一性同一个元素同一个事件只能设置一个处理函数…

离了大谱,公司测试岗却新来了个00后卷王,3个月薪资干到20K.....

最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业。想要获得更好的待遇和机会&#xff0c;不断提升自己的技能栈成了测试老人迫在眉睫的问题。 不论是面试哪个级别的测试工程师&#xff0c;面试官都会问一句“会编程吗&#xff1f;有没有自动化测试…

spring-web HandlerAdapter 源码分析

说明 本文基于 jdk 8, spring-framework 5.2.x 编写。author JellyfishMIX - github / blog.jellyfishmix.comLICENSE GPL-2.0 HandlerAdapter 接口 提供作为处理器适配器的能力。 supports 方法判断是否支持该 handler。 public interface HandlerAdapter {/*** 判断是否…

【跟着陈七一起学C语言】今天总结:初识C语言

友情链接&#xff1a;专栏地址 知识总结顺序参考C Primer Plus&#xff08;第六版&#xff09;和谭浩强老师的C程序设计&#xff08;第五版&#xff09;等&#xff0c;内容以书中为标准&#xff0c;同时参考其它各类书籍以及优质文章&#xff0c;以至减少知识点上的错误&#x…

Ansys Zemax | 设计抬头显示器时要使用哪些工具 – 第二部分

本文为使用OpticStudio工具设计优化HUD抬头显示器系统的第二部分&#xff0c;主要包含演示了如何使用OpticStudio工具设计分析抬头显示器&#xff08;HUD&#xff09;性能&#xff0c;即全视场像差&#xff08;FFA&#xff09;和NSC矢高图。&#xff08;联系我们获取文章附件&a…

RabbitMQ之工作队列 ( Work Queues )

Work Queues 1. 轮询分发消息1.1 抽取工具类1.2 启动两个工作线程1.3 启动一个发送线程1.4 结果展示 2. 消息应答2.1 概念2.2 自动应答2.3 消息应答的方法2.4 Multiple 的解释2.5 消息自动重新入队2.6 消息手动应答代码2.7 手动应答效果演示 3. RabbitMQ 持久化3.1 概念3.2 队列…

逍遥自在学C语言 | 条件控制的正确使用姿势

前言 在C语言中&#xff0c;有三种条件判断结构&#xff1a;if语句、if-else语句和switch语句。 一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、if语句 基本语法 if (条…

大厂过来人忠告:学java有没有前途?想转行应该准备什么?

对于想转行学习java来人说&#xff0c;最可怕的问题就是信息闭塞。很多人开始的时候都是因为没能了解清楚情况&#xff0c;找不到学习思路&#xff0c;胡乱下手学习一通其实效果并不好&#xff0c;只是感动了自己&#xff0c;没有太大成效。毕竟时间这么宝贵&#xff0c;你也不…