搭建Nacos环境:
1.首先先安装Nacos
2.在Nacos安装目录下打开bin文件夹
3.在搜索栏输入cmd打开cmd命令界面输入 startup -m standalone (单例启动Nacos)
(如果要搭建Nacos集群那么要用集群启动,并且将Conf文件夹里面的sql语句注入数据库
并且将application.properties中的数据库配置配置好)
依赖方面:
注意:SpringBoot用2.3.9.RELEASE版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--nacos的管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springboot-web项目启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--nacos项目依赖配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--nacos配置中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
代码方面:
(1)消费者项目
1.配置文件:
注意:application改为bootstrap(bootstrap的启动优先级高于application)
如果为application.yml启动的时候启动会有问题
(关于springcloud的项目都要改为bootstrap)
server:
port: 8082
spring:
cloud:
nacos:
server-addr: localhost:8848
application:
name: test1
将服务注入到Nacos中需要写接口
@RestController
//@RefreshScope用于自动刷新Nacos中的配置文件(当Nacos中有改动就会自动刷新载入到项目,免于重新启动项目)
@RefreshScope
public class orderservice {
@Autowired
private DiscoveryClient discoveryClient;
//使用Springboot提供的RestTemplate用于连接生产者项目
@Autowired
private RestTemplate restTemplate;
@Autowired
private RotationUtil rotationUtil;
//载入nacos的云端配置文件
@Value("${wen.name}")
private String name;
//↓下面的接口是用户通过该接口来访问消费者项目的接口
@RequestMapping("getOrder")
public String getOrder(){
//通过服务名test1获取nacos里面注册的服务列表
List<ServiceInstance> instances = discoveryClient.getInstances("test1");
//通过RotaionUtil类的轮询负载均衡算法获取是用集群的那个节点来处理
ServiceInstance serviceInstance = rotationUtil.getServiceInstance(instances);
//从获取的集群节点获取它的uri链接地址,用于访问项目
URI uri = serviceInstance.getUri();
String forObject = restTemplate.getForObject(uri + "/test", String.class);
return forObject;
}
}
RotationUtil类
@Component
public class RotationUtil {
//定义一个原子类AtomicInteger给他的初始值设置为0
private AtomicInteger AtomicInteger =new AtomicInteger(0);
public ServiceInstance getServiceInstance(List<ServiceInstance> serviceInstances){
//通过AtomicInteger.incrementAndGet()每次获取都会自增1,且AtomicInteger在项目运行阶段,
//只要不重启,值会一直存在
int count = AtomicInteger.incrementAndGet();
//设置他的下表为count取余list集合serviceInstances的大小
int index = count % serviceInstances.size();
//获取集合中的指定集合
return serviceInstances.get(index);
}
}
(2)生产者项目
1.配置文件
server:
port: 8082
spring:
cloud:
nacos:
server-addr: localhost:8848
application:
name: test1
生产者的Controller:
@RestController
public class testservice {
@RequestMapping("test")
public String test(){
return "我是服务端8082";
}
}
可以将生产者项目启动多个,改动端口号,来实现负载均衡
如此Nacos的生产者消费者项目的负载均衡就搭建好了