一、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