服务提供者的代码放在github上了,有需要的可以参考。
github地址
首先Nacos是阿里开源的注册中心与配置中心,具体的学习与安装可以查看官方文档,Nacos官方中文文档
Fegin是一种Springcloud提供的服务调用的实现,具体学习可以查看官网或者中文社区
pom依赖
这里有第一个坑,springboot与springcloud有版本对应关系,不能乱用,具体对应关系可以 官网介绍
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<revision>1.0.0-SNAPSHOTrevision>
<spring-cloud.version>2021.0.1spring-cloud.version>
<spring.boot.version>2.6.6spring.boot.version>
<lombok.version>1.18.22lombok.version>
<nacos.version>2021.1nacos.version>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring.boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>${lombok.version}version>
dependency>
<dependency>
<groupId>com.fancygroupId>
<artifactId>SpringCloud-feignartifactId>
<version>${revision}version>
dependency>
<dependency>
<groupId>com.fancygroupId>
<artifactId>SpringCloud-feign-implartifactId>
<version>${revision}version>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>${nacos.version}version>
dependency>
dependencies>
dependencyManagement>
接口定义module,这个module专门用来定义feign,方便提供者与消费者引用。
pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
dependencies>
定义一个feign接口,需要注意name不能乱写,feign在进行调用时如果我们没有指定url会根据注册中心通过这个name获取提供服务的机器进行负载均衡然后调用,这个name应该就是提供服务的服务名
由于我们定义出来的feign当别人引入时,如果这样写是加载不到spring容器中的,我们不应该让引用我们服务的人自己去手动扫描这个包,可以使用springboot的机制来自己加载我们想要加载的类
添加配置文件spring.factories放字资源目录META-INF下
写一个配置类去帮引用我们服务的人加载我们的服务
feign定义层就写完了,feign的入参出参应该也定义在这个module中。
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency> // 这个是我们自己的jar 写的名字不太规范
<groupId>com.fancygroupId>
<artifactId>SpringCloud-feignartifactId>
dependency>
启动类上写个注解将自己注册到Nacos即可
@EnableDiscoveryClient
写一个实现feign接口的具体逻辑层,
server:
port: 8081
spring:
application:
name: feign-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
服务提供者就写完啦
这个我们就建一个简单的module就行
<properties>
<java.version>1.8java.version>
<spring-cloud.version>2021.0.1spring-cloud.version>
<nacos.version>2021.1nacos.version>
properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>${nacos.version}version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<scope>runtimescope>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency> // 引入我们定义的api包 注意需要将这个包install一下 下载到我们本地仓库
<groupId>com.fancygroupId>
<artifactId>SpringCloud-feignartifactId>
<version>1.0.0-SNAPSHOTversion>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
启动类上加个注解将自己注册到Nacos上
@EnableDiscoveryClient
server:
port: 8082
spring:
application:
name: feign-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
然后就搞定啦 调用下即可
由于我们在API定义层已经完成了feign的扫描操作,所以在提供者消费者都不需要在启动类上加注解
@EnableFeignClients 加了反而会报错哦