Spring Cloud Alibaba之声明式服务调用框架OpenFeign

实例演示1:使用OpenFeign调用服务

基于nacos的服务提供者:

  • 创建SimpleOpenFeign的maven项目,添加pom依赖
    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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-nacos-discovery</artifactId></dependency></dependencies>
  • 编写启动类,引入注解 
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class SpringBootApp {public static void main(String[] args) {SpringApplication.run(SpringBootApp.class, args);}}
  • 配置application.yml文件
server.port=8080
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  • 编写控制类方法,通过OpenFeign框架调用远端服务
package prj.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@Component
@FeignClient(name = "ServiceForOpenFeign")
interface Openfeignclient {@GetMapping("/getAccount/{id}")String getAccount(@PathVariable String id);
}@RestController
public class Controller {@Autowiredprivate Openfeignclient tool;@GetMapping("/demoOpenFeign/{id}")public String demoOpenFeign(@PathVariable String id)  {return tool.getAccount(id);}}
  • 在application.yml配置文件设置超时时间
feign.client.config.default.connectTimeout=2000
  • 在application.yml配置文件设置输出debug级别的日志
logging.level.prj.controller=DEBUG
  • 在启动类添加配置代码,设置OpenFeign输出日志范围
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class SpringBootApp {@Configurationpublic class FeignConfig{@BeanLogger.Level feignLoggerLevel(){return Logger.Level.FULL;}}public static void main(String[] args) {SpringApplication.run(SpringBootApp.class, args);}}

  • 在application.yml配置文件设置请求参数压缩和返回结果
feign.compression.request.enabled=true
feign.compression.response.enabled=true
  • 在application.yml配置文件设置待压缩请求的最小值
feign.compression.request.min-request-size=4096

实例演示2:实现负载均衡和服务降级

创建OpenFeignWithRibbon项目:

(1)负载均衡:

  • 修改application.yml配置文件中的端口号
server.port=9090
  • 编写控制类方法,引入OpenFeign框架,实现以负载均衡的方法调用远程服务
@Component
@FeignClient(name = "GateWayPrj")
interface Openfeignclient {@GetMapping("/callServiceByRibbon")String callServiceByRibbon();
}@RestController
public class Controller {@Autowiredprivate Openfeignclient tool;@GetMapping("/demoOpenFeignWithRibbon")public String demoOpenFeignWithRibbon()  {return tool.callServiceByRibbon();}}
  • 在application.yml文件中指定负载均衡细节,连接超时时间以及重试次数
server.port=9090
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRibbonRule
feign.sentinel.enabled=true

(2)服务降级:

  • 添加pom依赖引入Sentinel组件
    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency></dependencies>

  • 在OpenFeign框架接口的@FeignClient注解引入fallback参数
@Component
@FeignClient(name = "GateWayPrj",fallback = FallbackHandler.class)
interface Openfeignclient {@GetMapping("/callServiceByRibbon")String callServiceByRibbon();
}
  • 编写服务降级实现类
package prj.controller;import org.springframework.stereotype.Component;@Component
public class FallbackHandler implements Openfeignclient{public String callServiceByRibbon(){ return "In Fallback Function.";	}}

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

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

相关文章

MySQL中Explain执行计划各参数的含义

EXPLAIN 语句输出的各个列的作用先大致罗列一下&#xff1a; 列名 描述 id 在一个大的查询语句中每个SELECT关键字都对应一个唯一的id select_type SELECT关键字对应的那个查询的类型 table 表名 partitions 匹配的分区信息 type 针对单表的访问方法 possible_keys…

VR加密方案常见问题有哪些?

在数字化时代&#xff0c;随着虚拟现实&#xff08;VR&#xff09;技术的迅速发展与普及&#xff0c;VR视频内容的安全传输成为关注焦点。为保护版权及敏感信息免遭非法复制或篡改&#xff0c;VR视频加密技术显得尤为重要。 首先&#xff0c;高效的加密算法对确保数据安全性至关…

动态流体工厂大屏

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 动态流体工厂大屏 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Task.Run(() >{while (true){this.Invoke(() >…

Linux之prometheus安装和使用简介(一)

一、prometheus简介 普罗米修斯Prometheus是一个开源系统监控和警报工具包&#xff0c;最初构建于SoundCloud。自2012年成立以来&#xff0c;许多公司和组织都采用了普罗米修斯&#xff0c;该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目&#xff0c;独立…

正则表达式详解及应用

正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;简称正则&#xff0c;是一种用于匹配字符串中字符组合的模式。它广泛应用于字符串查找、替换、数据验证等任务中。在Java中&#xff0c;正则表达式的支持由java.util.regex包提供。本文将详细介绍正则表达式的…

【深度学习】实践方法论

李宏毅深度学习笔记 优化问题 训练数据的损失不够低的时候&#xff0c;到底是模型偏差&#xff0c;还是优化的问题&#xff1f; 判断方法是通过比较不同的模型来判断模型现在到底够不够大 看到一个从来没有做过的问题&#xff0c;可以先跑一些比较小的、比较浅的网络&#x…

如何使用Hugging Face Transformers为情绪分析微调BERT?

情绪分析指用于判断文本中表达的情绪的自然语言处理(NLP)技术&#xff0c;它是客户反馈评估、社交媒体情绪跟踪和市场研究等现代应用背后的一项重要技术。情绪可以帮助企业及其他组织评估公众意见、提供改进的客户服务&#xff0c;并丰富产品或服务。 BERT的全称是来自Transfo…

编译VTK静态库

编译VTK静态库遇到问题 vtkCommonCore-9.3d.lib(vtkSMPToolsAPI.obj) : error LNK2019: unresolved external symbol "public: bool __cdecl vtk::detail::smp::vtkSMPToolsImpl<1>::IsParallelScope(void)" (?IsParallelScope?$vtkSMPToolsImpl$00smpdetai…

基于深度学习的图片检索

基于深度学习的图片检索 图片检索是指在大规模图像库中&#xff0c;根据给定的查询图像或描述&#xff0c;找到与之相关的图像。基于深度学习的方法通过提取高层次特征和语义信息&#xff0c;实现了高效和准确的图片检索。 深度学习在图片检索中的优势 特征提取能力强&#…

网信办算法备案详细解读——中国人工智能监管新规

中国出台新规旨在防范人工智能的相关风险&#xff0c;且规定了从事人工智能相关业务的实体的合规义务。 要点&#xff1a; • 中华人民共和国&#xff08;中国&#xff09; 通过推出并实施如下一系列法规&#xff0c;在人工智能监管方面领先于其他司法管辖 区&#xff1a…

Spring Cloud Alibaba之限流与防护组件Sentinel

实例演示1&#xff1a;通过Sentinel实现限流 创建SentinelDemo的Maven项目&#xff0c;配置pom文件&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId&…

智能化招聘管理系统的价格大概是多少?会很贵吗?

很多企业在做自己本单位的招聘的时候&#xff0c;使用的方法都是非常的原始的人工方法。这些方法虽然成本不大&#xff0c;但是给人事人员带来的工作压力是比较大的&#xff0c;因为来企业面试的人或许非常多&#xff0c;带来的简历也是比较多的。这个时候需要人事人员人工的筛…

1.变量数据类型

1.常见的字面量类型,整数,浮点数,字符串 2.注释 # , “”“”“” , todo注释 一般包括序言性注释(功能接口,数据的描述,模块功能),功能性注释(程序段的功能,语句功能,数据的状态), 3.变量 记录存储数据. 定义变量不需要指定类型 变量名称 值 变量的值是可以改变的,可重复使…

Linux源码阅读笔记07-进程管理4大常用API函数

find_get_pid find_get_pid(...)函数功能&#xff1a;根据进程编号获取对应的进程描述符&#xff0c;具体Linux内核源码对应函数设计如下&#xff1a; 获取进程描述符&#xff0c;且描述符的count1&#xff0c;表示进程多一个用户 pid_task pid_task(...)函数功能&#xff1…

vue2中的组件自定义事件

1.绑定事件: <组件 :自定义名称"方法" /> 2.调用 this.$emit(方法,参数) 3.关闭 this.$off(方法) 案例: 1.提前准备好组件 Student组件 <template><div class"student"><h1>学校名称:{{ st…

惠普笔记本双指触摸不滚屏

查看笔记本型号 一般在笔记本背面很小的字那里 进入惠普官网 笔记本、台式机、打印机、墨盒与硒鼓 | 中国惠普 (hp.com) 选择“支持”>“解决问题”>“软件与驱动程序” 选择笔记本 输入型号&#xff0c;选择操作系统 下载驱动进行完整 重启之后进行测试

Studying-代码随想录训练营day22| 回溯理论基础、77.组合、216.组合总和II、17.电话号码的字母组合

第22天&#xff0c;回溯章节开始&#xff01;一大算法难点&#xff0c;加油加油&#xff01; 回溯理论基础组合问题的剪枝操作 文档讲解&#xff1a;代码随想录回溯理论基础 视频讲解&#xff1a;回溯理论基础 回溯法也叫回溯搜索法&#xff0c;它是一种搜索&#xff0c;遍历的…

Arathi Basin (AB) PVP15

Arathi Basin &#xff08;AB&#xff09; PVP15 阿拉希盆地&#xff0c;PVP&#xff0c;15人战场

放大招了|十亿参数大模型LLMs运行功耗仅需13W,内存使用量减少90%!

矩阵乘法&#xff08;MatMul&#xff09;历来是大型语言模型&#xff08;LLMs&#xff09;总体计算成本的主导因素&#xff0c;尤其在模型向更大维度嵌入和上下文长度发展时&#xff0c;这一成本呈指数级增长。 近期有一篇刚刚发表的论文中提出的方法完全去除了矩阵乘法操作&am…

grpc学习golang版( 三、proto文件数据类型)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 文章目录 一、proto语法二、proto中的标量类型三、proto中的数组类型四、proto中的Map类型五、proto中的嵌套类型六、…