springcloud学习 feign与nacos的使用

公司使用Feig+Nacos作为微服务架构,之前没有学习过,最近学习了一下踩了很多坑,记录一下

服务提供者的代码放在github上了,有需要的可以参考。
github地址
首先Nacos是阿里开源的注册中心与配置中心,具体的学习与安装可以查看官方文档,Nacos官方中文文档
Fegin是一种Springcloud提供的服务调用的实现,具体学习可以查看官网或者中文社区

这里只有入门实现,没有原理,想看原理的朋友可以跳了

服务提供者

父工程

pom依赖
这里有第一个坑,springboot与springcloud有版本对应关系,不能乱用,具体对应关系可以 官网介绍

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <revision>1.0.0-SNAPSHOT</revision>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
        <spring.boot.version>2.6.6</spring.boot.version>
        <lombok.version>1.18.22</lombok.version>
        <nacos.version>2021.1</nacos.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fancy</groupId>
                <artifactId>SpringCloud-feign</artifactId>
                <version>${revision}</version>
            </dependency>
            <dependency>
                <groupId>com.fancy</groupId>
                <artifactId>SpringCloud-feign-impl</artifactId>
                <version>${revision}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${nacos.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

API定义工程

接口定义module,这个module专门用来定义feign,方便提供者与消费者引用。
pom依赖

	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

定义一个feign接口,需要注意name不能乱写,feign在进行调用时如果我们没有指定url会根据注册中心通过这个name获取提供服务的机器进行负载均衡然后调用,这个name应该就是提供服务的服务名
定义feign
由于我们定义出来的feign当别人引入时,如果这样写是加载不到spring容器中的,我们不应该让引用我们服务的人自己去手动扫描这个包,可以使用springboot的机制来自己加载我们想要加载的类
添加配置文件spring.factories放字资源目录META-INF下
在这里插入图片描述
写一个配置类去帮引用我们服务的人加载我们的服务
在这里插入图片描述
feign定义层就写完了,feign的入参出参应该也定义在这个module中。

业务逻辑工程

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency> // 这个是我们自己的jar 写的名字不太规范
            <groupId>com.fancy</groupId>
            <artifactId>SpringCloud-feign</artifactId>
        </dependency>

启动类上写个注解将自己注册到Nacos即可
@EnableDiscoveryClient
写一个实现feign接口的具体逻辑层,

  • 注意一定要将它交给spring管理,如果不给spring管理找不到这个类,那么会认为服务没有实现,返回的结果一直是null
  • 并且我们定义的这User类一定要有空构造方法!

在这里插入图片描述
yml

server:
  port: 8081
spring:
  application:
    name: feign-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

服务提供者就写完啦

服务消费者

这个我们就建一个简单的module就行

<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
        <nacos.version>2021.1</nacos.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${nacos.version}</version>
        </dependency>
        <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>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency> // 引入我们定义的api包  注意需要将这个包install一下 下载到我们本地仓库
            <groupId>com.fancy</groupId>
            <artifactId>SpringCloud-feign</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

启动类上加个注解将自己注册到Nacos上
@EnableDiscoveryClient

写个测试类
yml

server:
  port: 8082
spring:
  application:
    name: feign-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

然后就搞定啦 调用下即可
由于我们在API定义层已经完成了feign的扫描操作,所以在提供者消费者都不需要在启动类上加注解
@EnableFeignClients 加了反而会报错哦

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值