SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用
目录:
1.SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用
2.SpringBoot+Nacos+Gateway实现一个端口调用多个不同服务
3.sentinel环境搭建及集合SpringBoot简单使用
一、概述
微服务的开发必定会用到SpringBoot、Nacos(服务发现、注册、配置中心)、OpenFeign(服务远程调用,也就是通过注解调用其他服务的接口)。今天写这篇是想把这三个功能集成在一起。
让他们一起参与微服务的开发工作。
要实现的目标:nacos要能够注册及发现服务,openfeign要能够调用远程服务的接口并返回数据。
步骤:
1.安装nacos,打开nacos服务,并登录nacos管理后台(账号密码都是:nacos)
2.创建一个消费者SpringBoot工程,用于注册与发现服务,并进行远程服务调用
3.创建一个生产者SpringBoot工程,用于注册服务,其提供的服务供消费者工程调用
二、实现步骤
1.安装nacos(windows版),安装过程比较简单,参考博客
安装好之后找到bin目录双击打开startup.cmd
打开后的画面
2.创建一个SpringBoot生产者工程
a.配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.yw.admin.server</groupId> <artifactId>SpringBootAdminServer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBootAdminServer</name> <description>SpringBootAdminServer</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.67_noneautotype2</version> </dependency> <!-- 注册中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.9.RELEASE</version> </dependency> <!-- 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.9.RELEASE</version> </dependency> <!-- 服务间远程调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.9.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
b.配置resources/application.yml和bootstrap.yml
server: port: 8001 spring: application: name: tony-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #nacos的ip和端口 group: tony-group #服务分组,这个需要注意下,消费者和生产者的group要一致
spring: application: name: tony-provider cloud: nacos: config: server-addr: 127.0.0.1:8848 #nacos的端口
c.配置工程入口
@EnableFeignClients //启用远程服务调用注解 @SpringBootApplication //SpringBoot工程入口注解 @EnableDiscoveryClient //启用服务发现注解 public class MainProviderApplication { public static void main(String[] args) { SpringApplication.run(MainProviderApplication.class, args); } }
d.写一个UserController用于供消费者工程远程调用
@RestController @RequestMapping("/user") public class UserController { @GetMapping public UserBean getUser() { return new UserBean("德玛西亚", 32, "男"); } }
好了,到这里生产者工程,也就是提供服务的工程已经算是好了。下面贴一下消费者工程的代码。
3.消费者工程
1.pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.yw.admin.server</groupId> <artifactId>SpringBootAdminServer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBootAdminServer</name> <description>SpringBootAdminServer</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.67_noneautotype2</version> </dependency> <!-- 注册中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.9.RELEASE</version> </dependency> <!-- 配置中心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.9.RELEASE</version> </dependency> <!-- 服务间远程调用--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.9.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
b.resources/application.xml和bootstrap.xml
server: port: 8002 spring: application: name: tony-consumer cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #这里是nacos也就是注册中心的ip和端口。代表我这个工程要向注册中心注册 group: tony-group
spring: application: name: tony-consumer cloud: nacos: config: server-addr: 127.0.0.1:8848 #这里是nacos也就是注册中心的ip和端口。代表我这个工程要向注册中心注册
c.工程入口添加注解
@EnableFeignClients//开启远程过程调用 @SpringBootApplication @EnableDiscoveryClient//开启服务注册与发现 public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
d.写一个DiscoverController用于浏览器或者postman测试使用
@Slf4j @RestController @RequestMapping public class DiscoverController { //此处就是基于Feign的注解,其就是一个接口,之后贴代码。宝子们只需要知道用这个接口就可以调用远程服务就行了 @Autowired UserFeignClient userFeignClient; @GetMapping("/getUser")//这是本地服务调用,不要和远程的弄混淆了 public UserBean getUser(){ return userFeignClient.getUser();//执行远程服务调用 } }
e.看看具体的远程Feign接口是怎么写的
@FeignClient("tony-provider")//这里加上远程服务调用的注解,其中“tony-provider”你你要调用远程服务的名字。 public interface UserFeignClient { @GetMapping("/user")//远程服务的路径,这里就要和生产者工程中的UserController中的getUser相对应了 public UserBean getUser(); }
测试的时候测试消费者工程。路径为:http://localhost:8002/getUser然后就可以拿到内容提供者工程返回的一个值,如下:
我把服务注册后nacos中的服务列表也贴出来把。
好了,到这里正式结束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库