- 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-service1
2. 服务消费者:nacos-cosumer1
2. 图形化说明
![image.png](https://cdn.nlark.com/yuque/0/2020/png/1609516/1592877126539-7513340b-d3ae-4350-a810-faf31d12ca4d.png#align=left&display=inline&height=421&margin=%5Bobject%20Object%5D&name=image.png&originHeight=421&originWidth=1099&size=110476&status=done&style=none&width=1099)
<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: 8081
spring:
application:
name: nacos-service1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
managetment:
endpoints:
web:
exposure:
include: "*"
主类代码
@SpringBootApplication
@EnableDiscoveryClient
public class NacosService1Application {
public static void main(String[] args) {
SpringApplication.run(NacosService1Application.class, args);
}
}
controller层代码
@RestController
public 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: 8082
spring:
application:
name: nacos-consumer1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
managetment:
endpoints:
web:
exposure:
include: "*"
主类代码(这里我们使用restTemplate的方式,openFeigns方式也可以)
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsmer1Application {
public static void main(String[] args) {
SpringApplication.run(NacosConsmer1Application.class, args);
}
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
controller层代码
@RestController
public class TestCallServiceController {
@Autowired
private 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-service1
cloud:
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: 8081
spring:
application:
name: nacos-service1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
service: nacos-gaoxi
managetment:
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: 8081
spring:
application:
name: nacos-service1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
ip: 10.11.60.211
managetment:
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: 8081
spring:
application:
name: nacos-service1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 8c387036-874c-4627-a7f1-872bf9b657cc
managetment:
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: 8081
spring:
application:
name: nacos-service1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
cluster-name: James
managetment:
endpoints:
web:
exposure:
include: "*"