版本说明
我用的版本为springboot2.5.5+springcloud2020.0.4。
nacos集群配置
相关依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
(2020.0版本的springcloud配置bootstrap.yml需要引入第三个依赖)
1.修改nacos/conf下的cluster.conf.example文件,去掉example后缀名,更改为cluster.conf
2.修改cluster.conf中的集群的ip地址以及端口(我是在本地搭的集群,如果是在服务器上搭建就把ip地址改一下)
3.修改nacos/conf下的application.properties中的端口server.port修改为该机器的端口
去掉关于数据库的注释并修改数据库名称、用户和密码。
4.修改完成后复制两份nacos文件并修改端口
5.进入各自的nacos/bin目录下打开cmd,直接输入 start.up.cmd启动
配置nginx负载均衡
打开nginx/conf下的nginx.conf文件
在http{}中加入
upstream nacos-cluster{
server localhost:8845;
server localhost:8847;
server localhost:8849;
}
server{
listen 8003;
server_name localhost;
location /nacos{
proxy_pass http://nacos-cluster;
}
}
把端口改成各个nacos配置中的端口
启动nginx
访问localhost:8003/nacos即可负载均衡到nacos中
idea修改配置文件
把server-addr:改为nginx中配置的端口
启动服务后即可在nacos中找到该服务
记录一个小坑
利用openfeign调用远程服务时发现了这个错
Caused by: java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer
2020.0版本的springcloud中把spring-cloud-starter-netflix-ribbon换成了 spring-cloud-loadbalancer
既然他说我忘记引入loadbalancer,我就引入,引入后如下
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
再次启动,他又报了这个错
java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;)Lorg/springframework/cloud/client/ServiceInstance;
最后发现是由于导入 spring-cloud-loadbalancer后nacos中 spring-cloud-starter-netflix-ribbon会与它冲突,造成loadbalanc包失效
于是在最后,在nacos依赖中排除掉netfix-ribbon包就好了,依赖如下
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
参考这篇博文