06-微服务OpenFeigh和Sentinel持久化

这篇具有很好参考价值的文章主要介绍了06-微服务OpenFeigh和Sentinel持久化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、OpenFeign基础应用

1.1 概念

OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求,用法其实就是编写一个接口,在接口上添加注解即可。

可以简单理解它是借鉴Ribbon的基础之上,封装的一套服务接口+注解的方式的远程调用器。

1.2 OpenFeign作用

它的宗旨是在编写Java Http客户端接口的时候变得更加容易,其底层整合了Ribbon,所以也支持负载均衡。

之前我们使用Ribbon的时候,利用RestTemplate对Http请求进行封装处理,但是在实际开发中,由于对服务依赖的调用不可能就一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以OpenFeign在此基础之上做了进一步的封装,由它来帮助我们定义和实现依赖服务接口的定义,我们只需创建一个接口并使用注解的方式来配置它,即可完成对微服务提供方的接口绑定,简化Ribbon的操作。

1.3 具体案例

模拟两个服务提供者 9001,9002,一个消费者9003。三个服务

  • 首先在父工程的pom.xml文件引入
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-openfeign</artifactId>  
    <version>2.2.3.RELEASE</version>  
</dependency>
  • 然后再9003服务引入依赖
 <dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-openfeign</artifactId>  
</dependency>
  • 启动类增加@EnableFeignClients注解
  • 创建远程调用服务接口FeignService
@Service  
@FeignClient(value = "nacos-payment-provider")  
public interface FeignService {  
  
    @GetMapping("/demo")  
    public String demo();  
}
  • controller层调用

@Resource  
private FeignService feignService;  
  
@GetMapping("/demoTest")  
public String demoTest(){  
    return feignService.demo();  
}

通过浏览器访问,负载均衡的调用9001 9002服务
06-微服务OpenFeigh和Sentinel持久化,微服务,微服务,sentinel,架构

1.4 OpenFeign超时时间控制

OpenFeign 客户端默认等待1秒钟,但是如果服务端业务超过1秒,则会报错。为了避免这样的情况,我们需要设置feign客户端的超时控制。

由于OpenFeign 底层是ribbon 。所以超时控制由ribbon来控制。在yml文件中配置

server:  
  port: 9003  
spring:  
  application:  
    name: cloud-nacos-consumer  
    cloud:  
      nacos:  
        discovery:  
          server-addr: localhost:8848  
  
#设置feign客户端超时时间(OpenFeign默认支持ribbon)  
ribbon:  
  #指的是建立连接后从服务器读取到可用资源所用的时间  
  ReadTimeout: 5000  
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间  
  ConnectTimeout: 5000

1.5 OpenFeign日志打印

Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。 简单理解,就是对Feign接口的调用情况进行监控和输出

日志级别:

  • NONE:默认的,不显示任何日志;
  • BASIC:仅记录请求方法、URL、响应状态码及执行时间;
  • HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息;
  • FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据

具体应用

需要在启动类中通过@Bean注解注入OpenFeign的日志功能

@Bean  
Logger.Level feignLoggerLevel(){  
    return Logger.Level.FULL;  
}

在yaml配置文件中配置日志级别

server:  
  port: 9003  
spring:  
  application:  
    name: cloud-nacos-consumer  
    cloud:  
      nacos:  
        discovery:  
          server-addr: localhost:8848  
  
#设置feign客户端超时时间(OpenFeign默认支持ribbon)  
ribbon:  
  #指的是建立连接后从服务器读取到可用资源所用的时间  
  ReadTimeout: 5000  
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间  
  ConnectTimeout: 5000  
  
logging:  
  level:  
    com.wsrbb.service.FeignService: debug

06-微服务OpenFeigh和Sentinel持久化,微服务,微服务,sentinel,架构

1.6 Sentinel整合OpenFeign

  • 在我们的9003消费者服务里面增加依赖
<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  
</dependency>  
<dependency>  
    <groupId>org.springframework.cloud</groupId>  
    <artifactId>spring-cloud-starter-openfeign</artifactId>  
</dependency>  
<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>  
</dependency>
  • 激活Sentinel对OpenFeign的支持,配置yml
# 激活Sentinel对OpenFeign的支持
feign:
  sentinel:
    enabled: true
  • OpenFegin接口编写
    fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
@Service  
@FeignClient(value = "nacos-payment-provider",fallback = FeignServiceFallBack.class)  
public interface FeignService {  
    @GetMapping("/demo")  
    public String demo();  
}

@Component  
public class FeignServiceFallBack implements FeignService {  
  
    @Override  
    public String demo() {  
        return "服务降级";  
    }  
}
  • 测试访问,正常没问题,如果我们手动关闭9001 9002两个服务,则会出现
    06-微服务OpenFeigh和Sentinel持久化,微服务,微服务,sentinel,架构

二、 Sentinel持久化配置

在Sentinel Dashboard中配置规则之后重启应用就会丢失,所以实际生产环境中需要配置规则的持久化实现,Sentinel提供多种不同的数据源来持久化规则配置,包括file,redis、nacos、zk。

2.1 Sentinel规则持久化到Nacos

将限流规则持久化进Nacos保存,只要刷新8401某个接口地址,Sentinel控制台的流控规则就能感应到,同时只要Nacos里面的配置不删除,针对8401上Sentinel的流控规则就持续有效。
![[Pasted image 20240110233829.png]]

其实就是实现Sentinel Dashboard与Nacos之间的相互通信

通过Nacos配置文件修改流控规则—拉取—>Sentinel Dashboard界面显示最新的流控规则

**注意:在Nacos控制台上修改流控控制,虽然可以同步到Sentinel Dashboard,但是Nacos此时应该作为一个流控规则的持久化平台,所以正常操作过程应该是开发者在Sentinel Dashboard上修改流控规则后同步到Nacos,遗憾的是目前Sentinel Dashboard不支持该功能。

2.2 具体操作步骤

  • 引入依赖
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <version>1.8.1</version>
</dependency>
  • 配置yaml文件
server:  
  port: 8042  
spring:  
  application:  
    name: cloud-sentinel-8042  
  cloud:  
    nacos:  
      discovery:  
        server-addr: localhost:8848  
    sentinel:  
      transport:  
        # 配置Sentinel dashboard地址  
        dashboard: localhost:8080  
        # 默认8719端口,键入被占用会自动从8719+1,直到找到未被占用的端口  
        port: 8719  
      web-context-unify: false  
      datasource:  
        nacos:  
          nacos:  
            server-addr: localhost:8848  
            groupId: DEFAULT_GROUP  
            dataId: ${spring.application.name}-flow-rules.json  
            rule-type: flow
  • 进入到Nacos控制台。添加配置

06-微服务OpenFeigh和Sentinel持久化,微服务,微服务,sentinel,架构

具体配置内容:

[   
    {
        "resource": "test1",
        "limitApp": "default",
        "grade": 1,
        "count": 2,
        "strategy": 0,
        "controlBehavior": 0
        "clusterMode": false
    }
]
---------------具体内容含义-----------------
resource:资源名称;
limitApp:来源应用;
grade:阈值类型,0表示线程数,1表示QPS;
count:单机阈值;
strategy:流控模式,0表示直接,1表示关联,2表示链路;
controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
clusterMode:是否集群。

重启项目,刷新对应的接口,我们就可以在Sentinel界面上看到对应的限流规则
06-微服务OpenFeigh和Sentinel持久化,微服务,微服务,sentinel,架构

如果对你有帮助,可以关注博主(不定期更新各种技术文档)
给博主一个免费的点赞以示鼓励,谢谢 ! 欢迎各位🔎点赞👍评论收藏⭐️文章来源地址https://www.toymoban.com/news/detail-805816.html

到了这里,关于06-微服务OpenFeigh和Sentinel持久化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sentinel 规则持久化到 Nacos

    Sentinel的控制台规则管理有三种模式: 原始模式:控制台配置的规则直接推送到Sentinel客户端,也就是我们的应用。然后保存在内存中,服务重启则丢失 pull模式:控制台将配置的规则推送到Sentinel客户端,而客户端会将配置规则保存在本地文件或数据库中。以后会定时去本地

    2024年02月16日
    浏览(40)
  • Sentinel授权规则和规则持久化

    大家好我是苏麟 , 今天说说Sentinel规则持久化. 授权规则 授权规则可以对请求方来源做判断和控制。 授权规则 基本规则 授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。 白名单:来源(origin)在白名单内的调用者允许访问 黑名单:来源(origin)在黑名单内

    2024年02月08日
    浏览(38)
  • sentinel整合nacos配置中心持久化

    在网上找了很多的资料,发现sentinel整合nacos持久化的博文和视频大多数都只有改造限流部分的教程,并且都需要修改前端,略显麻烦,至于剩下的熔断、热点流控、授权的更是没有相关的改造教程,最后在知乎的看到一篇文章后让我大受启发 这位前辈讲到sentinel原来是把配置

    2024年02月04日
    浏览(40)
  • Sentinel + Nacos流控规则持久化配置

    json参数对映sentinel 规则面板      第二步,告诉订单服务读取配置,添加yml配置  

    2024年04月23日
    浏览(21)
  • Sentinel控制台配置 持久化到nacos

      sentinel控制台,使用方便,功能强大。使用官方的jar包,配置不会持久化,sentinel重启后会导致,之前的规则全部丢失,下面一起改造源码实现规则数据的持久化 (github访问太慢,直接上镜像版) Sentinel: Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来

    2024年02月09日
    浏览(30)
  • sentinel规则持久化-规则同步nacos-最标准配置

    官方参考文档: 动态规则扩展 · alibaba/Sentinel Wiki · GitHub 需要修改的代码如下: 为了便于后续版本集成nacos,简单讲一下集成思路 1.更改pom 修改sentinel-datasource-nacos的范围 将 改为 2.拷贝示例 将test目录下的com.alibaba.csp.sentinel.dashboard.rule.nacos包下的内容拷贝到src的 com.alibaba.

    2024年02月07日
    浏览(36)
  • Sentinel-Dashboard-1.8持久化Nacos

    Sentinel-Dashboard-1.8持久化Nacos 一、客户端改造 1.引入pom.xml文件依赖 2.配置application.yml文件。 客户端改造完成 二、Sentinel-Dashboard源码改造 1.修改pom.xml中nacos的范围中【test】注释。 2.把test目录下com/alibaba/csp/sentinel/dashboard/rule下的nacos文件夹复制到main相同目录下 3.修改application.

    2024年02月04日
    浏览(26)
  • Spring Cloud Sentinel整合Nacos实现配置持久化

    sentinel配置相关配置后无法持久化,服务重启之后就没了,所以整合nacos,在nacos服务持久化,sentinel实时与nacos通信获取相关配置。 使用上一章节Feign消费者服务实现整合。 版本信息: nacos:1.4.1 Sentinel 控制台 1.7.2 spring-boot:2.3.3.RELEASE spring.cloud.version:Hoxton.SR8 spring.cloud.alibaba.v

    2024年02月08日
    浏览(44)
  • Spring Cloud Alibaba全家桶(八)——Sentinel规则持久化

    本文小新为大家带来 Sentinel规则持久化 相关知识,具体内容包括, Sentinel规则推送三种模式 介绍,包括: 原始模式 , 拉模式 , 推模式 ,并对 基于Nacos配置中心控制台实现推送 进行详尽介绍~ 不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强者

    2024年01月25日
    浏览(29)
  • (十五)docker安装sentinel,客户端配置规则本地持久化

    操作系统: Linux  CentOS 7.3 64位 docker版本: 19.03.8 sentinel版本: 1.8.0 1、拉取镜像   2、运行容器   3.访问sentinel http://192.168.121.132:8858/ 账号密码默认都是sentinel ​ sentinel配置的规则默认是存在内存里的,不够稳定,所以我们需要持久化到本地文件中。 1.新建持久化处理类 在我

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包