Nacos是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序,通过Spring Cloud和阿里巴巴Nacos
Discovery,您可以基于Spring云的编程模型快速访问Nacos服务注册功能。
服务发现是微服务体系结构中的关键组件之一。在这样的体系结构中,为每个客户机手动配置服务列表可能是一项艰巨的任务,这使得动态扩展非常困难。Nacos Discovery帮助您自动向Nacos服务器注册服务,Nacos server跟踪服务并动态刷新服务列表。此外,Nacos Discovery向Nacos注册服务实例的一些元数据,例如主机、端口、健康检查URL和主页。
版本选择一直是使用SpringBoot与SpringCloud中遇到的比较恶心的问题,网上关于Nacos的介绍也很少提到这些版本对应的关系,一不小心就会导致各种错误,为了防止大家踩坑,专门在这里整理了一下SpringBoot与SpringCloud以及SpringBoot与SpringCloudAlibaba版本的对应关系,希望对大家有帮助.
由于 Spring Boot 1 和 Spring Boot 2 在 Actuator 模块的接口和注解有很大的变更,且 spring-cloud-commons 从 1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟 SpringBoot 版本号一致的版本:
目前官方文档只公示以上几个SpringBoot与Spring Cloud Alibaba的对应关系。
SpringCloud版本 | SpringBoot版本 |
---|---|
2021.0.1-SNAPSHOT | Spring Boot >=2.6.4-SNAPSHOT and <2.7.0-M1 |
2021.0.0 | Spring Boot >=2.6.1 and <2.6.4-SNAPSHOT |
2021.0.0-RC1 | Spring Boot >=2.6.0-RC1 and <2.6.1 |
2021.0.0-M3 | Spring Boot >=2.6.0-M3 and <2.6.0-RC1 |
2021.0.0-M1 | Spring Boot >=2.6.0-M1 and <2.6.0-M3 |
2020.0.5 | Spring Boot >=2.4.0.M1 and <2.6.0-M1 |
Hoxton.SR12 | Spring Boot >=2.2.0.RELEASE and <2.4.0.M1 |
… | … |
详情请参考SpringBoot与SpringCloud对应关系
本次使用版本说明
依赖关系管理如果您是Maven Central用户,请将我们的BOM添加到您的pom中。xml<dependencyManagement>部分。这将允许您省略任何Maven依赖项的版本,而是将版本控制委托给BOM。
<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>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
spring-cloud-dependencies和spring-cloud-alibaba-dependencies是微服务必不可少的两个依赖,作用是去声明组件的版本,方便版本管理。
我们上面已经做了依赖管理,所以这里就不用再去关注spring-cloud-starter-alibaba-nacos-discovery的版本了
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
使用 spring-boot-starter-actuator 可以用于检测系统的健康情况、当前的Beans、系统的缓存等
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
以下pom文件是本次教程的所有依赖,可以直接拷贝使用。
<?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.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.nacos</groupId>
<artifactId>nacos_provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos_provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring.cloud.version>2020.0.1</spring.cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.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>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在application.properties接入以下配置:
server.port=8081
spring.application.name=nacos-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
在启动类上加上@EnableDiscoveryClient注解
@EnableDiscoveryClient
@SpringBootApplication
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
此时如果我们启动工程的话,会报以下错误:
com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried: java.net.ConnectException: Connection refused: connect
org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is java.lang.reflect.UndeclaredThrowableException
那是因为我们还没有启动nacos客户端,因此无法注册我们的服务信息,不要着急,请接着往下看。
进入Nacos官网nacos
点击下面的版本说明V2.1.0版本说明下载nacos-server-2.1.0.zip
nacos-service默认是集群启动,若要单机启动,在bin目录下执行 startup.cmd -m standalone 命令
D:\nacos\nacos-server-2.1.0\nacos\bin>startup.cmd -m standalone
"nacos is starting with standalone"
,--.
,--.'|
,--,: : | Nacos 2.1.0
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 6428
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://10.61.156.135:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
2022-08-09 15:03:01,860 INFO Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler@48f5bde6' of type [org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-08-09 15:03:01,860 INFO Bean 'methodSecurityMetadataSource' of type [org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2022-08-09 15:03:02,404 INFO Tomcat initialized with port(s): 8848 (http)
2022-08-09 15:03:02,879 INFO Root WebApplicationContext: initialization completed in 4303 ms
2022-08-09 15:03:08,507 INFO Initializing ExecutorService 'applicationTaskExecutor'
2022-08-09 15:03:08,691 INFO Adding welcome page: class path resource [static/index.html]
2022-08-09 15:03:09,175 INFO Creating filter chain: Ant [pattern='/**'], []
2022-08-09 15:03:09,248 INFO Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5c20aab9, org.springframework.security.web.context.SecurityContextPersistenceFilter@7fb33394, org.springframework.security.web.header.HeaderWriterFilter@75308740, org.springframework.security.web.csrf.CsrfFilter@25da615a, org.springframework.security.web.authentication.logout.LogoutFilter@387bf2d9, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1a891add, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@d74bac4, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4b7c4456, org.springframework.security.web.session.SessionManagementFilter@3a5c2626, org.springframework.security.web.access.ExceptionTranslationFilter@7ee3d262]
2022-08-09 15:03:09,388 INFO Initializing ExecutorService 'taskScheduler'
2022-08-09 15:03:09,420 INFO Exposing 2 endpoint(s) beneath base path '/actuator'
2022-08-09 15:03:09,583 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos'
2022-08-09 15:03:09,593 INFO Nacos started successfully in stand alone mode. use embedded storage
输入 http://127.0.0.1:8848/nacos/index.html#/
就可以登陆我们的注册中心了,nacos注册中心的用户名和密码都是nocas