当前位置: 首页 > news >正文

Spring Cloud、Spring Cloud LoadBalancer、Nacos 和 OpenFeign整合

版本

  1. Spring Cloud 3.1.1
  2. spring cloud loadbalancer 3.1.1
  3. nacos 2021.1
  4. open feign 3.1.1

引入依赖

在项目的 pom.xml 文件中添加相关依赖:

<dependency><groupId>org.springframework.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>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

配置Nacos

在 application.yml 中配置Nacos服务发现和Feign的相关设置:

spring:application:name: service-consumer # 当前服务名cloud:nacos:discovery:server-addr: localhost:8888 # Nacos服务地址loadbalancer:retry: true # 启用重试机制
feign:client:config:default:connect-timeout: 5000read-timeout: 5000

主应用类

在主应用类中启用Feign客户端和Nacos服务发现:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class ServiceConsumerApplication {public static void main(String[] args) {SpringApplication.run(ServiceConsumerApplication.class, args);}
}

创建Feign客户端接口

定义一个接口,用于调用另一个服务的API:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;@FeignClient(name = "service-provider") // 这里的name是被调用服务的名称
public interface ServiceProviderClient {@GetMapping("/api/hello")String sayHello(@RequestParam(name = "name") String name);
}

使用Feign客户端

在你的控制器或服务中使用Feign客户端进行服务调用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConsumerController {@Autowiredprivate ServiceProviderClient serviceProviderClient;@GetMapping("/hello")public String hello(@RequestParam(name = "name") String name) {return serviceProviderClient.sayHello(name);}
}

配置Nacos服务注册和发现

确保在被调用的服务(例如service-provider)的 application.yml 中配置了Nacos服务注册:

spring:application:name: service-providercloud:nacos:discovery:server-addr: localhost:8888 # 注册中心地址

在 service-provider 项目的主应用类中也需要启用服务发现:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(ServiceProviderApplication.class, args);}
}

并在service-provider项目中实现对应的控制器方法:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ProviderController {@GetMapping("/api/hello")public String sayHello(@RequestParam(name = "name") String name) {return "Hello, " + name + "!";}
}

启动服务

启动Nacos Server后,依次启动service-provider和service-consumer服务。访问service-consumer服务的 /hello 接口,验证服务间调用是否成功。
例如,访问 http://localhost:8090/hello?name=World 应该会调用service-provider服务的API,并返回 “Hello, World!”。
通过上述步骤,你已经成功整合了Spring Cloud、Spring Cloud LoadBalancer、Nacos和OpenFeign,实现了微服务之间的调用。

相关文章:

  • [ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
  • hnust 湖南科技大学 2022 软件测试报告+代码
  • 宏集Panorama SCADA:个性化定制,满足多元角色需求
  • Apple开发者应用商店(AppStore)描述文件及ADHOC描述文件生成
  • 深拷贝、浅拷贝、引用拷贝
  • 台湾合泰原装BS66F360 封装LQFP-44 电容触摸按键 AD+LED增强型触控
  • 【Mac】Downie 4 for Mac(视频download工具)兼容14系统软件介绍及安装教程
  • 算法课程笔记——蓝桥第17次直播云课
  • window.clearInterval(timer) 清除定时器
  • React Native采集数据离线存储、网络状态监控、加密上传、鉴权
  • 4.通用编程概念
  • 4、js数据类型,检测数据类型
  • webrtc vp8/9视频编解码介绍
  • 【C语言】04.循环结构
  • Flink 基于 TDMQ Apache Pulsar 的离线场景使用实践
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [数据结构]链表的实现在PHP中
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • EventListener原理
  • extjs4学习之配置
  • isset在php5.6-和php7.0+的一些差异
  • java 多线程基础, 我觉得还是有必要看看的
  • Javascript 原型链
  • Mysql优化
  • Quartz初级教程
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Vim 折腾记
  • vuex 学习笔记 01
  • 第十八天-企业应用架构模式-基本模式
  • 关于for循环的简单归纳
  • 聚类分析——Kmeans
  • 免费小说阅读小程序
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (javaweb)Http协议
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (三)Honghu Cloud云架构一定时调度平台
  • (四) 虚拟摄像头vivi体验
  • (四)事件系统
  • (四)图像的%2线性拉伸
  • (转)nsfocus-绿盟科技笔试题目
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net 验证控件和javaScript的冲突问题
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET中使用Protobuffer 实现序列化和反序列化
  • @EnableWebMvc介绍和使用详细demo