【SpringCloudAlibaba系列--OpenFeign组件】OpenFeign的配置、使用与测试以及OpenFeign的负载均衡

步骤一 准备两个服务,provider和consumer

本文使用kotlin语言

provider是服务的提供者,由provider连接数据库

@RestController
@RequiredArgsConstructor
@RequestMapping("/provider/depart")
class DepartController(private val departService: DepartService, private val discoveryClient: DiscoveryClient,private val environment: Environment@GetMapping("/list")fun listHandle(): MutableList<Depart> {val port = environment.getProperty("local.server.port")println("当前服务运行在端口: $port")return departService.findAllDeparts()}}

consumer是服务的消费者,consumer会去调用provider提供的服务

  • consumer需要添加loadbalancer
    // FeignBlockingLoadBalancerClientimplementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer:4.0.4'
  • consumer的yml
  • 此处的yml的其他部分在nacos配置中心中,关于nacos的配置中心如何使用见我的另一篇博客
    【SpringCloudAlibaba系列–nacos配置中心】
spring:application:name: equipment-management-feigncloud:nacos:config:username: your_usr_namepassword: your_pssserver-addr: xxx.xxx.xx.xx:8848file-extension: ymlgroup: HardwareServices namespace: e8c3bd64-52ff-494e-a51f-a907d9f098b8openfeign:client:config:default:connect-timeout: 500 #设置超时时间read-timeout: 500compression:request:enabled: true #开启压缩mime-types: ["text/xml", "application/xml", "application/json","video/mp4"]min-request-size: 1024 #超过此数值进行压缩response:enabled: truehttpclient:hc5:enabled: true #使用hc5,默认是hc4,也可以选择OkHttpconfig:import:- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}
  • EquipmentConfig
  • 从所有provider实例中,根据 n a m e 获取所有的可用实例,再根据 name获取所有的可用实例,再根据 name获取所有的可用实例,再根据name随机选择一个
// 负载均衡
class EquipmentConfig {@Beanfun randomLoadBalancer(e:Environment,factory:LoadBalancerClientFactory):ReactorLoadBalancer<ServiceInstance>{//获取微服务名称var name: String? = e.getProperty(LoadBalancerClientFactory.PROPERTY_NAME)// 从所有provider实例中,根据$name获取所有的可用实例,再根据$name随机选择一个return RandomLoadBalancer(factory.getLazyProvider(name, ServiceInstanceListSupplier::class.java),name)}}
  • DpartController
@RestController
@RequestMapping("/consumer/depart")
@RequiredArgsConstructor
class DepartController(private val departService: DepartService) {//查全部@GetMapping("/list")fun listHandle():List<Depart>?=departService.listAllDeparts()
}
  • DepartService
  • 此处注意,下面接口中的@FeignClient(“depart-provider”, path = “/provider/depart”)这种写法是新版openfeign的唯一方式,老版可以把path中的内容写在前面
@FeignClient("depart-provider", path = "/provider/depart") // 新版唯一方式
interface DepartService {//查全部@GetMapping("/list")fun listAllDeparts():List<Depart>?
}
  • 启动类
  • 在启动类上加上这句:@LoadBalancerClients(defaultConfiguration = [EquipmentConfig::class])
@LoadBalancerClients(defaultConfiguration = [EquipmentConfig::class])
@SpringBootApplication
@EnableFeignClients
class EquipmentManagement8012Applicationfun main(args: Array<String>) {runApplication<EquipmentManagement8012Application>(*args)
}

启动多个provider

  • 按照截图中的内容操作
    在这里插入图片描述
  • 勾选Allow multiple instances
    在这里插入图片描述
  • 点击Copy Configuration
    在这里插入图片描述
  • 注意多实例运行同一个微服务时,多个微服务不能使用同一个接口,在-Dserver.port=xxxx处指定你的接口
    在这里插入图片描述
    启动多个实例后,多次访问consumer的接口,然后查看你启动的多个provider的输出,看看是否成功
    在这里插入图片描述
    在这里插入图片描述
    如图所示,都能访问到就是成功了

有任何问题想要探讨可以私信我

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

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

相关文章

vscode与vue环境配置

一、下载并安装VScode 安装VScode 官网下载 二、配置node.js环境 安装node.js 官网下载 会自动配置环境变量和安装npm包(npm的作用就是对Node.js依赖的包进行管理)&#xff0c;此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号&#xff1a; 配置系统变量 因为在执…

springboot213大学生心理健康管理系统的设计与实现

大学生心理健康管理系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;试卷信息因为其管理内容繁杂&#xff0c;管理…

套接字与套接字编程

对于刚刚学习计算机网络&#xff1a;自顶向下的同学们&#xff0c;在观看了中科大的视频---TCP Socket以及UDP Socket会感到些许疑惑&#xff0c;不过没事&#xff0c;在这篇小文章将会为你解开Socket的神秘面纱 什么是Socket&#xff1f;: Socket 是一套用于不同主机之间通信…

JAVA代码审计之XSS漏洞

Part1 漏洞案例demo&#xff1a; 没有java代码审计XSS漏洞拿赏金的案例。 所以将就看看demo吧 漏洞原理&#xff1a;关于XSS漏洞的漏洞原理核心其实没啥好说的&#xff0c;网上一查一大堆 反射性XSS漏洞 <% page language"java" contentType"text/html; c…

java——File类和字符集

目录 File类File类的常用操作&#xff1a;案例&#xff1a;文件搜索的实现案例&#xff1a;递归文件夹删除 字符集几种常见的字符集总结字符集的编码和解码 File类 File是java.io.包下的类&#xff0c;File类的对象&#xff0c;用于代表当前操作系统的文件&#xff08;可以是文…

ESP8266智能家居(4)——开发APP基础篇

1.前期准备 安装好Android studio 开发环境 准备一台完好的安卓手机 手机要处于开发者模式 设置 --->关于手机---> 一直点击版本号 &#xff08;不同手机进入开发者模式的步骤可能不太一样&#xff09; 进入开发者模式后&#xff0c;找到辅助功能&#xff0c;打开开…

厌倦了混乱的代码?掌握编写干净代码库的艺术

对于入门的开发人员来说&#xff0c;虽然克服了最初的障碍&#xff0c;学会了编程&#xff0c;找到了理想的工作。但其编程旅程并没有就此结束。他们面临真正的挑战&#xff1a;如何编写更好的代码。这不仅仅是为了完善功能&#xff0c;还要编写出经得起时间考验的优雅、可维护…

J7 - 对于ResNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 J6周有一段代码如下 思考过程 首先看到这个问题的描述&#xff0c;想到的是可能使用了向量操作的广播机制然后就想想办法验证一下&…

基于springboot+vue的房屋租赁管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

flink内存管理,设置思路,oom问题,一文全

flink内存管理 1 内存分配1.1 JVM 进程总内存&#xff08;Total Process Memory&#xff09;1.2 Flink 总内存&#xff08;Total Flink Memory&#xff09;1.3 JVM 堆外内存&#xff08;JVM Off-Heap Memory&#xff09;1.4 JVM 堆内存&#xff08;JVM Heap Memory&#xff09;…

辩证易货模式做成App的可行性分析

随着科技的进步和移动互联网的普及&#xff0c;越来越多的传统业务模式开始寻求数字化转型&#xff0c;以适应市场的发展和满足用户的需求。易货模式&#xff0c;作为一种古老而又现代的交易方式&#xff0c;同样面临着这样的机遇和挑战。那么&#xff0c;将辩证易货模式做成Ap…

【Git】:标签功能

标签功能 一.标签操作二.推送远程标签 标签 tag &#xff0c;可以简单的理解为是对某次commit的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff0c;在项⽬发布某个版本的时候&#xff0c;针对最后⼀次commit起⼀个v1.0这样的标签来标识⾥程碑的意义。这有什么⽤呢&…