一、nacos下载、安装、启动
1.下载地址:https://github.com/alibaba/nacos/releases/tag/2.0.3
2.解压后启动服务
2.1Linux/Unix/Mac
进入到/nacos/bin目录下
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
2.2 Windows
启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
3.看到下面界面表示启动成功了
4.在浏览器查看可视化界面http://localhost:8848/nacos/ 账号密码:nacos nacos
5.nacos配制成服务使其开机自启动
先运行sh shutdown.sh关闭nacos,编辑nacos/bin/startup.sh,将JAVA_HOME修改成自己的路径,忘记了自己的路径的可以去/etc/profile看看
新建文件nacos.service并编辑
vim /lib/systemd/system/nacos.service
将下面的复制进去,注意红色部分改成自己的nacos所在的路径
[Unit] Description=nacos After=network.target [Service] Type=forking ExecStart=/usr/local/nacos/bin/startup.sh #单机模式这个语句需要修改为如下ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存后执行以下命令即可
systemctl daemon-reload
systemctl enable nacos.service
systemctl start nacos.service
systemctl status nacos.service #查看启动状态
二、项目总体结构
1.star-job:服务调用方
2.star-people:服务提供方
3.三个people搭建服务集群
三、搭建父工程nacos-parent
删掉src,在pom文件中导入依赖,注意版本对应关系

四、搭建服务提供方star-people
1.项目结构
2.pom.xml中导入依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--nacos客户端--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
3.application.yml配置文件
server: port: 6677 spring: cloud: nacos: discovery: server-addr: localhost:8848 application: name: star-people
4.controller
@RestController public class PeopleController { @Value("${server.port}") private int port;//获取本服务端口,方便查看本服务是否被调用 @RequestMapping("/findPeople/{id}") public Map<String,Object> findPeople(@PathVariable("id") int id){ Map<String,Object> map=new HashMap<>(); map.put("status",200); map.put("port",port); map.put("people","查到的人物id为"+id); return map; } }
5.启动类
@SpringBootApplication @EnableDiscoveryClient public class PeopleApp { public static void main(String[] args) { SpringApplication.run(PeopleApp.class,args); } }
五、搭建服务调用者
1.相关依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
2.配置文件application.yml
server: port: 5566 spring: application: name: star-job cloud: nacos: discovery: server-addr: localhost:8848
3.Controller服务调用
@RestController public class JobController { @Autowired private DiscoveryClient discoveryClient; @Autowired private LoadBalancerClient loadBalancerClient; @RequestMapping("/getJobById/{id}") public Map<String,Object> getJob(@PathVariable("id") int id){ //也可以写个配置类return new RestTemplate()后通过注解@Autowired注入 RestTemplate rest = new RestTemplate(); Map map = rest.getForObject("http://localhost:6677/findPeople/"+id, Map.class); return map; } }
4.启动类
@SpringBootApplication @EnableDiscoveryClient public class JobApp { public static void main(String[] args) { SpringApplication.run(JobApp.class,args); } }
六、启动后测试结果可以看到调用成功
可视化界面也有显示http://localhost:8848/nacos
七、搭建服务集群实现负载均衡
spring-cloud-alibaba-nacos-discovery包已经集成了ribbon
1.搭建多个服务的提供方,这里将star-people多复制几份,然后修改pom.xml中的项目名字和application.yml中的port,服务名保持一样(star-people)
2.修改服务调用方star-job的controller,使用DiscoveryClient或者LoadBalancerClient
@RestController public class JobController { @Autowired private DiscoveryClient discoveryClient; @Autowired private LoadBalancerClient loadBalancerClient; @RequestMapping("/getJobById/{id}") public Map<String,Object> getJob(@PathVariable("id") int id){ //也可以写个配置类return new RestTemplate()后通过注解@Autowired注入 RestTemplate rest = new RestTemplate(); // Map map = rest.getForObject("http://localhost:6677/findPeople/"+id, Map.class); // List<ServiceInstance> instanceList = discoveryClient.getInstances("star-people"); // for (ServiceInstance instance : instanceList) { // System.out.println("服务地址uri"+instance.getUri()); // } ServiceInstance serviceInstance = loadBalancerClient.choose("star-people"); System.out.println("当前处理服务的端口为"+serviceInstance.getUri()); //调用服务提供端 Map map = rest.getForObject(serviceInstance.getUri() + "/findPeople/"+id, Map.class); return map; } }
3.查看nacos可视化界面可以看到集群的三个服务了
八、测试负载均衡
启动所有服务后,访问服务的调用方star-job接口,刷新几次可以看到这三个服务的提供方依次被调用。
控制台也有显示,至此,说明此集群已经实现了负载均衡机制。
-----------------------------------------2021-10-22 更新:添加配置中心-----------------------------
九、添加配置中心
作用:
一个项目在开发,测试,上线可以使用不同的配置文件application.yml
nacos只支持 .proertoes .yaml
1.在已有项目中添加新module,如上面这个项目添加:
结构:
2.添加依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-config</artifactId> </dependency>
3.添加配置文件application.yaml
server: port: 7780 spring: cloud: nacos: discovery: server-addr: localhost:8848 application: name: nacos-config name: 7780哈哈哈哈哈嘎嘎嘎嘎嘎
4.启动类
@SpringBootApplication @EnableDiscoveryClient public class ConfigApp { public static void main(String[] args) { SpringApplication.run(ConfigApp.class,args); } }
5.在nacos可视化界面查看是否注册成功,如下表示成功
6.在配置列表添加配置,即yaml配置文件,第一次进去为空,直接添加即可
根据项目中application.yaml内容按照自己需求修改Port等信息,注意文件名规则,前缀保持一致

server: port: 7778 spring: cloud: nacos: discovery: server-addr: localhost:8848 application: name: nacos-config name: 7778大大大大大大

server: port: 7779 spring: cloud: nacos: discovery: server-addr: localhost:8848 application: name: nacos-config name: 7779发发发发发发

server: port: 7780 spring: cloud: nacos: discovery: server-addr: localhost:8848 application: name: nacos-config name: 7780哈哈哈哈哈嘎嘎嘎嘎嘎
7.删除原来application.yaml文件,新建bootstrap.yaml
spring: cloud: nacos: config: group: DEFAULT_GROUP prefix: nacosconfig #默认为 ${application.name} file-extension: yaml #内容的数据格式,只支持yaml properties server-addr: localhost:8848 application: name: nacosconfig profiles: active: test #当前环境
8.编写controller测试
@RestController @RefreshScope //开启自动刷新-当可视化界面中修改了配置文件是这里也自动获取修改后的内容 public class User { @Value("${server.port}") private int port; @Value("${name}") private String name; @RequestMapping("/getUser/{id}") public Map<String,Object> getUser(@PathVariable("id") int id){ Map<String,Object> map=new HashMap<>(); map.put("status",200); map.put("port",port); map.put("name",name+id); return map; } }
9.浏览器查看结果
项目git地址:https://github.com/smiles365/nacos