- 1.当前项目的问题
 - 2.2配置项研究
- 2.2.1spring.cloud.nacos.discovery.server-addr
 - 2.2.2spring.cloud.nacos.discovery.service
 - 2.2.3spring.cloud.nacos.discovery.weight
 2.2.4spring.cloud.nacos.discovery.network-interface- 2.2.5spring.cloud.nacos.discovery.ip
 - 2.2.6spring.cloud.nacos.discovery.port
 - 2.2.7 spring.cloud.nacos.discovery.namespace
 - 2.2.8 剩余的配置项,自己看
 - 2.2.9spring.cloud.nacos.discovery.cluster-name
 
 
1.当前项目的问题
问题描述:bi项目中使用alibaba-cloud是2.2.1版本,springboot使用的是2.1.7,springcloud使用Greenwich.SR2。pom文件如下
<dependencyManagement><dependencies><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.7.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR2</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
这里我查看了spring-cloud-alibaba的文档,说 Spring2.x要配spring-cloud-alibaba的2.x

①虽然官方这样要求,但是还是要以实际为准
②bi项目用的就是 1所示的配置方式  springboot2.1.x +springcloud-alibaba2.2.x,配置中心用的也好好的没什么问题。
但是,我们尝试用这套配置去使用 nacos注册中心的功能,就会出现问题了。问题如下:
java.lang.IllegalStateException: Error processing condition on com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration.nacosReactiveDiscoveryClient
所以根据官方文档的要求 ,我们升 springboot的版本,同时别忘了 springcloud版本也要升(和springboot版本对应),成功解决。结果pom文件:
<dependencyManagement><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.4.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR4</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
因此,鉴于当前springboot2.1.7版本的,我建议降springcloud-alibaba版本。即使用下面的配置,也是我下面演示实例的父工程的配置 ```xml
<dependencies><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.7.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR2</version><type>pom</type><scope>import</scope></dependency>
<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>
<a name="wxZJO"></a># 2.Nacos作为注册中心相关使用<a name="abp4E"></a>## 2.1基础演示项目搭建1. 环境描述:我们就演示一个服务提供者、一个服务消费者。1. 服务提供者:nacos-service12. 服务消费者:nacos-cosumer12. 图形化说明<a name="guiiL"></a>### 2.1.1nacos-service1的搭建步骤1. pom文件```xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
配置文件
server:port: 8081spring:application:name: nacos-service1cloud:nacos:discovery:server-addr: 127.0.0.1:8848managetment:endpoints:web:exposure:include: "*"
主类代码
@SpringBootApplication@EnableDiscoveryClientpublic class NacosService1Application {public static void main(String[] args) {SpringApplication.run(NacosService1Application.class, args);}}
controller层代码
@RestControllerpublic class TestCallController {@RequestMapping("sayHello")public String sayHello(){return "Hello Yunrun";}}
2.1.2nacos-consumer1的搭建步骤
pom文件
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
配置文件
server:port: 8082spring:application:name: nacos-consumer1cloud:nacos:discovery:server-addr: 127.0.0.1:8848managetment:endpoints:web:exposure:include: "*"
主类代码(这里我们使用restTemplate的方式,openFeigns方式也可以)
@SpringBootApplication@EnableDiscoveryClientpublic class NacosConsmer1Application {public static void main(String[] args) {SpringApplication.run(NacosConsmer1Application.class, args);}@LoadBalanced@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}
controller层代码
@RestControllerpublic class TestCallServiceController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping("callSayHello")public String callSayHello(){return restTemplate.getForObject("http://nacos-service1/sayHello", String.class);}}
2.1.3基础演示项目结果
时序图
- 访问结果
 

2.2配置项研究
2.2.1spring.cloud.nacos.discovery.server-addr
- 结论:配置nacos-server的ip:port
 配置实例(以nacos-service1为例)
spring:application:name: nacos-service1cloud:nacos:discovery:server-addr: 127.0.0.1:8848
3.解释说明:也就说你的 nacos-server的ip地址是 127.0.0.1,端口为8848
2.2.2spring.cloud.nacos.discovery.service
1.结论:配置该服务,注册入nacos-server的名称,默认是使用 spring.application.name
2.基础项目中的配置,注册到nacos-server中的结果
2.配置实例server:port: 8081spring:application:name: nacos-service1cloud:nacos:discovery:server-addr: 127.0.0.1:8848service: nacos-gaoximanagetment:endpoints:web:exposure:include: "*"
2.2.3spring.cloud.nacos.discovery.weight
结论:就是在服务调服务的过程中 ,我同一nacos-service1可能会部署多台服务器上,当我调用nacos-service1时会做一个负载均衡,这是weight值大的就会有多的访问频率
- 图形化解释
 
2.2.4spring.cloud.nacos.discovery.network-interface
- 结论:就是指定使用本机哪块网卡所对应ip,注册入nacos-server
 - 这个我没研究出来怎么配置,网卡名到底怎么指明没搞懂
 - 
2.2.5spring.cloud.nacos.discovery.ip
 结论:指明服务注册到nacos-sever中ip地址
- 配置实例(nacos-service1为例)
 
①配置前
②具体配置
server:port: 8081spring:application:name: nacos-service1cloud:nacos:discovery:server-addr: 127.0.0.1:8848ip: 10.11.60.211managetment:endpoints:web:exposure:include: "*"
③配置后
- 特别注意
 
一定要保证ip 的真实性,虽然ip可以随意写,也都可以注册到nacos-server,但是若ip不是真实的或ip配置有误,当请求服务时会找不到服务
2.2.6spring.cloud.nacos.discovery.port
- 结论:同配置ip一样,配置什么端口,注册信息就是什么端口,也要保证真实性
2.2.7 spring.cloud.nacos.discovery.namespace
1.结论:指定namespace后,服务会注册到相应的namespace,不同namespace之间服务互不通
2.图形解释
3.配置(nacos-service1为例)
①在nacos-server创建一个namespace
②配置文件
③结果server:port: 8081spring:application:name: nacos-service1cloud:nacos:discovery:server-addr: 127.0.0.1:8848namespace: 8c387036-874c-4627-a7f1-872bf9b657ccmanagetment:endpoints:web:exposure:include: "*"

2.2.8 剩余的配置项,自己看
2.2.9spring.cloud.nacos.discovery.cluster-name
1.结论:把同一个服务放入不同的集群中,感觉没太大作用,经测试 ,我 nacos-cosumer1在 自己的一个default-cluster中,nacos-service1在James这个集群中,仍然可以调用没有隔离效果
2.配制实例
3.结果server:port: 8081spring:application:name: nacos-service1cloud:nacos:discovery:server-addr: 127.0.0.1:8848cluster-name: Jamesmanagetment:endpoints:web:exposure:include: "*"

 
