nacos使用

本文详细介绍了SpringBoot项目如何整合Nacos作为配置中心、服务注册与发现中心,包括多环境配置、动态参数读取及服务消费者实现。

先说一个知识点,springboot配置文件加载顺序
bootstrap.properties --> bootstrap.yml -->
application.properties --> application.yml
其中bootstrap.properties一定会加载,我们打包后分渠道启动的时候,可以给不同渠道配置文件后面加上“-渠道名”
启动jar包的时候添加“–spring.profiles.active=渠道名”方式启动
例如 我们配置测试环境(test)和开发环境(dev)的bootstrap.properties
可以写成bootstrap-dev.properties,bootstrap-test.properties

jar包启动的命令:

# 启动开发环境
java -jar 你的jar包.jar --spring.profiles.active=dev
# 启动测试环境
java -jar 你的jar包.jar --spring.profiles.active=dev

如果在idea中直接启动,可配置启动参数
在这里插入图片描述

安装

官网
这里我使用docker 安装
注意:我们启动容器的时候加上 -d 让容器在后台运行

安装之后,通过ip+端口的方式访问
http://你的ip地址:8848/

在这里插入图片描述

spring cloud注册服务提供者

官网介绍

  1. 添加依赖,这里我使用的是2.2.0.RELEASE

    <!--nacos 服务注册与发现-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>2.2.0.RELEASE</version>
            </dependency>
    
  2. 配置 Nacos server 的地址和应用名

    spring:
      # nacos 中的服务名
      application:
        name: banner
      # nacos注册中心地址
      cloud:
        nacos:
          discovery:
            server-addr: 47.105.148.35:8848
    # 这里我多增加了一个属性后面测试用例中使用
    app:
      name: banner
    
  3. @SpringBootApplication注解上方添加注解

    // 开启服务注册发现功能
    @EnableDiscoveryClient
    
  4. 提供给一个controller方法,供他人调用

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/banner")
public class BananerContorller {

    @Value("${app.name}")
    private String appName;

    @GetMapping("/getAppName")
    public String getAppName(){
        return "my appName is :  "+appName;
    }
}

启动工程后可以通过http://localhost:8080/banner/getAppName调用方法

启动工程后可以在nacos控制台中看到
在这里插入图片描述

spring cloud使用服务消费者
  1. 添加feign注解,我这里使用2.2.2.RELEASE版本
        <!--服务消费者使用的feign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
  1. @SpringBootApplication注解上方添加注解@EnableFeignClients

  2. 编写一个service接口调用banner工程的方法,

    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    // banner工程的工程名
    @FeignClient(name="banner")
    public interface IBannerService {
        // banner工程中的调用路径
        @GetMapping(value="/banner/getAppName")
        public String getAppName();
    }
    
  3. 编写一个controller 调用service接口

    import com.sb.mbp.service.IBannerService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class FeignController {
    
        @Autowired
        private IBannerService iBannerService;
    
        @GetMapping("/getBannerAppName")
        public String getBannerAppName(){
            return iBannerService.getAppName();
        }
    }
    

启动之后,通过ip+端口+/getBannerAppName的方式请求一下。能收到banner工程/banner/getAppName接口的返回值

使用配置中心读取动态参数

这里我们以banner工程为例进行添加

在nocos中添加配置:
在这里插入图片描述
这里我使用yaml格式的文件
在这里插入图片描述

工程中使用:

  1. 添加依赖
            <!--接入配置中心-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>2.2.0.RELEASE</version>
            </dependency>
    
  2. 在bootstrap.properties中添加配置中心
# canos中配置文件的id
spring.application.name=banner-config
spring.cloud.nacos.config.server-addr=canos机器的ip:8848
# 配置文件类型
spring.cloud.nacos.config.file-extension=yaml
  1. 添加注解@RefreshScope
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 动态参数注解
@RefreshScope
@RestController
@RequestMapping(value = "/banner")
public class BananerContorller {

    @Value("${app.name}")
    private String appName;

    @GetMapping("/getAppName")
    public String getAppName(){
        return "my appName is :  "+appName;
    }
}

启动工程后我们请求接口,能获取到配置文件中的app.name。不用重启工程, 直接修改canos中的值,再次请求接口也能获取到变化后的值

多环境配置

我们可以在canos中配置同一工程的不同环境的配置,通过Data Id后面添加 -渠道的方式
像这样之前的配置是:banner-config.yaml,可以添加测试环境配置banner-config-test.yaml,生产环境banner-config-prod.yaml
在这里插入图片描述
在bootstrap.properties中多添加一个配置指定使用的后缀
例如下面的配置对应canos配置文件的id是:banner-config-test.yaml

spring.profiles.active=test
spring.application.name=banner-config
spring.cloud.nacos.config.server-addr=canosip:8848
spring.cloud.nacos.config.file-extension=yaml
### 服务发现与配置管理使用教程 #### 服务发现 Nacos 提供了强大的服务发现功能,支持多种服务注册与发现协议,包括 DNS、HTTP 和 RPC。通过 Nacos,开发者可以轻松实现服务的注册、发现和调用。 要开始使用 Nacos 进行服务发现,首先需要安装并启动 Nacos 服务。可以从 Nacos 的官方文档下载并按照指导安装 Nacos [^2]。安装完成后,可以通过以下步骤注册服务到 Nacos: 1. 在 Spring Boot 项目中添加 Nacos 服务发现的依赖,例如 `spring-cloud-starter-alibaba-nacos-discovery` [^4]。 2. 在 `application.yml` 或 `application.properties` 文件中配置 Nacos 服务器的地址。 3. 启动应用,服务将自动注册到 Nacos 中。 服务发现的实现可以通过 Feign 或 RestTemplate 来完成。Feign 是一个声明式的 Web 服务客户端,它使得编写 Web 服务客户端变得更加简单。使用 Feign 可以直接通过接口和注解来调用 Web 服务。 ```java @FeignClient(name = "service-provider") public interface ServiceClient { @GetMapping("/api") String callApi(); } ``` #### 配置管理 Nacos 的配置管理功能允许开发者动态地更新和获取配置信息,而无需重启服务。这意味着可以在不重新部署应用的情况下更改应用的行为。 要使用 Nacos 进行配置管理,需要在 Nacos 控制台创建配置文件,并通过 API 或 SDK 获取配置。在 Spring Boot 应用中,可以通过添加 `spring-cloud-starter-alibaba-nacos-config` 依赖来集成 Nacos 配置管理 [^4]。 ```yaml spring: cloud: nacos: config: server-addr: 127.0.0.1:8848 extension-configs: - data-id: user-service.properties group: DEFAULT_GROUP refresh: true ``` 以上配置指定了 Nacos 服务器的地址,并且指定了要加载的配置文件。当配置文件发生变化时,Nacos 会自动推送更新到应用,从而实现配置的热更新。 #### 动态配置服务 Nacos 支持配置版本管理,可以查看配置的历史版本,回滚到之前的版本,或者对比不同版本之间的差异。这有助于维护配置的一致性和可追溯性。 通过 Nacos 提供的 API,开发者可以发布配置,客户端则可以通过 API 获取配置 [^3]。 #### 服务融合 Nacos 还支持服务融合,这意味着它可以与其他服务框架无缝集成,如 Spring Cloud 和 Dubbo。这种融合使得开发者可以在不同的服务框架之间共享服务注册信息,从而简化了服务间的通信 [^1]。 #### 示例代码 下面是一个简单的示例,展示了如何使用 Nacos 进行服务发现: ```java @RestController public class ServiceController { @Autowired private ServiceClient serviceClient; @GetMapping("/call") public String callService() { return serviceClient.callApi(); } } ``` #### 相关问题 1. 如何在 Spring Boot 应用中集成 Nacos 服务发现? 2. 怎样利用 Nacos 实现配置的热更新? 3. Nacos 支持哪些服务发现协议? 4. 如何通过 Nacos 控制台管理配置文件? 5. 如何在 Nacos 中实现服务的健康检查?
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值