SpringBoot集成nacos注册中心以及Feign调用服务

本文开发环境介绍

开发依赖版本
Spring Boot2.6.6
Spring Cloud2021.0.1
Spring Cloud Alibaba2021.0.1.0
spring-cloud-alibaba-nacos-discovery2.2.0.RELEASE

nacos能做什么

在微服务开发中,经常会用到注册中心和配置中心,最初大家使用Srping Cloud Eureka做为注册中心,Spring Cloud Config做为配置中心,随着技术的发展,后面流行的注册中心和配置中心越来越多,有consualetcdzookeeperappollonacosacm等等。

nacos就是其中一款比较受欢迎的,nacos既能做注册中心,也能做配置中心,稍微降低了我们开发、部署微服务的复杂度,并且是阿里公司的作品,有长期的技术团队维护。

如何让bootstrap.yml生效

提到微服务的配置中心,就不得不提bootstrap.yml,这个配置在Spring Cloud应用中比application.yml先加载,这样就实现了从配置中心获取配置的目的。

可是SpringBoot应用本身不会加载bootstrap.yml这个配置文件的,需要添加如下依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

bootstrap.yml生效后,才能在这里面指定配置中心,让配置中心的配置项覆盖本地application.yml中的配置项

nocos注册中心

添加如下依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

可以不用手动再加**@EnableDiscoveryClient**,因为在NacosDiscoveryAutoConfiguration这个类中已经开启了nacos注册的功能

@Configuration(proxyBeanMethods = false)
@ConditionalOnDiscoveryEnabled
@ConditionalOnNacosDiscoveryEnabled
public class NacosDiscoveryAutoConfiguration {
    
}

bootstrap.yml最小配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: demo-dubbo-nacos

启动SpringBoot程序,查看nacos服务列表页面
在这里插入图片描述
我们的服务正确的注册到nacos

nacos server开启认证鉴权

在默认的Nacos server配置中,不会对客户端鉴权,即任何能访问Nacos server的用户,都可以直接获取Nacos中存储的配置。比如一个黑客攻进了企业内网,就能获取所有的业务配置,这样肯定会有安全隐患。

所以需要先开启Nacos server的鉴权。在Nacos server上修改application.properties中的nacos.core.auth.enabled值为true即可:

### If turn on auth system:
nacos.core.auth.enabled=true

如上设置后,Nacos客户端获取配置时,需要设置上对应的用户名和密码,才能获取配置。
然后可以在nacos管理控制台添加用户、设置权限等。

nacos开启认证后,应用程序的配置文件需要添加用户名密码

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: demo-dubbo-nacos
        username: nacos
        password: nacos

注册rest服务以及消费

上面已经成功把服务注册到nacos了,那么接下来我开发一个rest服务,然后再写一个消息端通过nacos发现这个rest服务并使用Feign组件进行调用。

服务生产者提供一个rest服务

直接上代码,利用SpringBoot提供的注解,快速提供一个rest接口

@RestController
public class DemoHelloController {

    @GetMapping(path = "/hello")
    public String hello(String name) {
        return name+",hello!";
    }
}

消费端

消费端pom.xml

消费端需要的完整依赖如下

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>

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

消费端bootstrap.yml

如果消费端只需要从注册中心发现服务,并不需要注册服务,那么bootstrap.yml配置文件可以通过一个配置项控制,完整bootstrap.yml配置如下

spring:
  application:
    name: demo-dubbo-nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: demo-dubbo-nacos
        register-enabled: false

其中register-enabled: false的作用就是不注册服务,可以达到我们只消费的目的。

消费端Feign

直接上代码

@FeignClient(name = "demo-dubbo-nacos")
public interface DemoProviderFeign {

    @GetMapping(path = "/hello")
    String hello(@RequestParam(name = "name") String name);
}

消费端Controller

@RestController
public class DemoHelloConsumerController {

    @Resource
    private DemoProviderFeign demoProviderFeign;

    @GetMapping(path = "/hello")
    public String hello(String name) {
        return demoProviderFeign.hello(name);
    }
}

测试验证

把消费端程序的端口改成8081

server:
  port: 8081

启动后执行curl测试

curl -ik "http://localhost:8081/hello?name=xxx"

响应结果如下

$ curl -ik "http://localhost:8081/hello?name=xxx"
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 10
Date: Tue, 05 Apr 2022 08:31:21 GMT

xxx,hello!

总结

这篇文章主要介绍了nacos做为注册中心的使用,以及如何使用Srping Cloud中的Feign进行消费,从上面的例子可以看出,仅仅是把注册中心替换成了nacos,微服务间的Feign调用并不受任何影响。后续会介绍nacos做为配置中心,以及dubbo服务的发布与消费。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太空眼睛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值