首页 > 其他分享 >spring cloud整合nacos

spring cloud整合nacos

时间:2022-09-29 15:24:36浏览次数:64  
标签:spring nacos springframework org config cloud

最近看到公司的项目服务的注册、发现以及配置都是用nacos来管理,实在是好奇其中的缘由,花了两天的时间翻阅了一些文档,在本地搭建了一个spring cloud的demo并将其注册到nacos上,进行一些配置。

nacos是什么?

在alibaba给出的官方文档里给出了这个问题的解释:nacos是动态服务注册、配置管理、服务管理的平台。

具体的一些定义以及使用可参考官方文档:Nacos文档

如何使用Nacos?

下载nacos客户端并启动

nacos客户端的下载方式

1.从Nacos给出的文档链接直接下载nacos-server-$version.zip Nacos server下载 (从官网下载的缺点是特别特别慢!大家可以从我的百度网盘下载)

2.百度网盘下载:https://pan.baidu.com/s/1DZWWjd3ML6rdZgQtMUxQQQ 提取码:gtja

启动nacos

1.修改nacos/conf下 application.properties的mysql配置

 

 

2.创建nacos_config数据库,执行nacos/conf下的nacos-mysql.sql文件

 

 

3.修改nacos/bin 下的startup.cmd启动方式为单机模式(set MODE="standalone")

 4.startup.cmd启动nacos

 5.访问http://localhost:8848/nacos/ 验证启动成功

账户密码:nacos/nacos

构建spring cloud服务

spring cloud服务使用nacos实现服务注册、发现,配置管理需要引入两个依赖

<!--注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

构建父工程nacos-demo

这里需要注意一点的是spring boot的版本要和spring cloud 、spring cloud alibaba的版本匹配,否则启动会报错

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>nacos-demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>nacos-provider</module>
        <module>nacos-consumer</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--spring-boot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring-cloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring-cloud-alibaba -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

构建子工程nacos-provider

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.example</groupId>
        <artifactId>nacos-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>nacos-provider</artifactId>

    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <optional>true</optional>
        </dependency>
        <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>
        <!--nacos注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--Nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

构建子工程nacos-consumer

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.example</groupId>
        <artifactId>nacos-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>nacos-consumer</artifactId>

    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
            <optional>true</optional>
        </dependency>
        <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>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--Nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

使用nacos实现服务注册

nacos-provider服务

1.在resource下创建一个bootstrap.properties文件加入nacos配置

文件命名一定要是bootstrap.properties不然在nacos上的配置也不生效

spring.application.name=nacos-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties

server.port=1128

2.启动类加入@EnableDiscoveryClient注解

package com.example.nacosprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderApplication.class, args);
    }

}

3.启动服务,出现以下情况说明服务注册成功

nacos-consumer服务

1.在resource下创建一个bootstrap.properties文件加入nacos配置

spring.application.name=nacos-comsumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#可以加载同一个namespace下面的不同group的多个配置文件
spring.cloud.nacos.config.ext-config[0].data-id=database.properties
spring.cloud.nacos.config.ext-config[0].group=GROUP_A
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=log.properties
spring.cloud.nacos.config.ext-config[1].group=GROUP_A
spring.cloud.nacos.config.ext-config[1].refresh=true
#可以加载当前group下面的多个配置文件
#spring.cloud.nacos.config.file-extension=properties
#spring.cloud.nacos.config.shared-dataids=database.properties
#spring.cloud.nacos.config.refreshable-dataids=database.properties
server.port=1121

2.启动类加入@EnableDiscoveryClient注解测试服务发现

package com.example.nacosconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumerApplication {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }
}

3.启动服务,效果同上

测试服务与服务之间的调用

nacos-provier

1.创建EchoController 

package com.example.nacosprovider.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@RestController
public class EchoController {

    @GetMapping("/echo/{string}")
    public String echo(@PathVariable String string) {
        return "Hello Nacos Discovery " + string;
    }
}

nacos-consumer

1.创建TestController

在TestController 中调用nacos-provider服务

package com.example.nacosconsumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
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.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RefreshScope
public class TestController {
    @GetMapping("/echo/{str}")
    public String echo(@PathVariable String str) {
        return restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);
    }

}

调用结果:

 使用nacos实现配置管理

以在nacos-provider配置为例

1.在nacos平台上的配置管理->配置列表+号新建配置所需的参数,形式如下

 

 

 2.在bootstrap.properties中加入config配置

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties

3.获取nacos中配置的值

package com.example.nacosprovider.controller;

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.RestController;

@RestController
@RefreshScope
public class ConfigController {

    @Value("${config.address}")
    private String address;

    @GetMapping("/print/address")
    public String printAddress(){
        return address;
    }
}

4.运行结果

 以上内容参考了https://www.zhihu.com/column/c_1197898155730358272这个博主写的关于nacos系列,内容简直让我拍手叫绝,妙!妙!妙!,大家如果有需要可以详细看一下里面的内容,除了写了nacos是如何实现服务注册、配置管理和服务管理,同时还写了nacos的命名空间,扩展配置以及共享配置,实现了配置的隔离,在启动项目可以通过项目启动参数指定运行的环境,根据不同的运行环境使用不同的配置。

标签:spring,nacos,springframework,org,config,cloud
From: https://www.cnblogs.com/Auge/p/16740975.html

相关文章

  • 十二、springMVC整合spring
    一、概述:需要进行spring整合springmvc吗?或者说还是否需要加入Spring的IOC容器?是否需要在web.xml文件中配置启动启动Spring IOC容器的ContextLoaderListener?需要整合......
  • 九、springMVC之文件上传
    一、配置方式web.xml:只配置了DispatcherServlet:1<?xmlversion="1.0"encoding="UTF-8"?>2<web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"3xml......
  • 二、springMVC之RequestMapping和绑定参数注解
    一、概述:配置方式:同HelloWord的配置方式;目录结构: @RequestMapping:@RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数及请求头映射请求;@RequestMa......
  • 基于 DolphinDB 搭建微服务的 SpringBoot 项目
    SpringBoot是一个基于Spring的快速开发框架,也是SpringCloud构建微服务分布式系统的基础设施。本文主要介绍如何通过SpringBoot快速搭建DolphinDB微服务,并且基于My......
  • Springboot自定义工具类中调用mapper或者service接口方式
    1、该类使用@Component注解2、添加一个本类类型的静态字段3、创建一个初始化方法,贴上@PostConstruct标签,用于注入bean4、创建方法调用mapper或service接口5、最后直接......
  • Spring Boot构建RESTful API与单元测试
    首先,回顾并详细说明一下@Controller、@RestController、@RequestMapping注解。@Controller:修饰class,用来创建处理http请求的对象@RestController:Spring4之后加入的注......
  • spring-security-oauth2-authorization-server
    旧依赖的移除长久以来,使用SpringSecurity整合oauth2,都是使用SpringSecurityOauth2这个系列的包:<dependency><groupId>org.springframework.security.oauth</grou......
  • Nacos Java Spring boot微服务配置错误 Error creating bean with name ‘configurati
    最近在学习微服务技术,在尝试Nacos的时候Java程序出错,提示Bean错误,在重新配置springboot和nacos的版本后,错误解决,下面是我用的版本,供大家参考。 Errorcreatingbean......
  • mybatis在spring mvc中的加载过程
    本地搭建了一套工程,把spring-5.2.x源码与mybatis-3.5.11源码做了整合,debug了一下mybatis-spring在springmvc中的加载过程。画了下面的图,删减了一些说明,图比较简练。后续......
  • Nacos配置管理
    回到SpringCloud##四、Nacos配置管理Nacos除了可以做注册中心,同样可以做配置管理来使用。1.1.统一配置管理当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服......