之七 2流高手速成記:基于Dubbo&Nacos的微服務簡要實現( 二 )


之七 2流高手速成記:基于Dubbo&Nacos的微服務簡要實現

文章插圖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.example</groupId><artifactId>dubbo-nacos-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency>consumer作為外部可訪問的web服務,自然需要持有web相關依賴項
同時,與provicer相同,其與api模塊保持依賴關系
package com.example.dubbonacosconsumer.controller;import com.example.dubbonacosapi.model.Person;import com.example.dubbonacosapi.service.PersonService;import org.apache.dubbo.config.annotation.DubboReference;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@RequestMapping("/person")public class PersonController {@DubboReferencePersonService service;@PostMapping("/insert")public Integer insert(Person person) {return service.insert(person);}@PostMapping("/update")public Integer update(Person person) {return service.update(person);}@PostMapping("/delete")public Integer delete(int id) {return service.delete(id);}@GetMapping("/select")public List<Person> select() {return service.select();}}留意PersonService的引入方式:不再是@Autowired,而是變更為@DubboReference —— 這是唯一的區別!
4. Consumer和Provider的配置項這里我們依然沿用上一節講到的知識——以nacos作為配置中心
二者同時僅在本地保留一個bootstrap.properties配置文件,application.properties托管給nacos
之七 2流高手速成記:基于Dubbo&amp;Nacos的微服務簡要實現

文章插圖
# Nacos幫助文檔: https://nacos.io/zh-cn/docs/concepts.html# Nacos認證信息spring.cloud.nacos.config.username=nacosspring.cloud.nacos.config.password=nacosspring.cloud.nacos.config.contextPath=/nacos# 設置配置中心服務端地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# Nacos 配置中心的namespace 。需要注意,如果使用 public 的 namcespace  , 請不要填寫這個值,直接留空即可# spring.cloud.nacos.config.namespace=# 應用名稱spring.application.name=dubbo-nacos-consumer# Nacos幫助文檔: https://nacos.io/zh-cn/docs/concepts.html# Nacos認證信息spring.cloud.nacos.config.username=nacosspring.cloud.nacos.config.password=nacosspring.cloud.nacos.config.contextPath=/nacos# 設置配置中心服務端地址spring.cloud.nacos.config.server-addr=127.0.0.1:8848# Nacos 配置中心的namespace 。需要注意,如果使用 public 的 namcespace  , 請不要填寫這個值,直接留空即可# spring.cloud.nacos.config.namespace=# 應用名稱spring.application.name=dubbo-nacos-provider內容均為nacos相關配置 , 以及各自聲明了自己的應用名稱(spring.application.name)
然后是他們在nacos上托管的配置數據:
之七 2流高手速成記:基于Dubbo&amp;Nacos的微服務簡要實現

文章插圖
注意,新創建配置的Data Id需要與他們的應用名稱同名
之七 2流高手速成記:基于Dubbo&amp;Nacos的微服務簡要實現

文章插圖
provider需要持有mysql相關配置
之七 2流高手速成記:基于Dubbo&amp;Nacos的微服務簡要實現

文章插圖
consumer作為controller的持有者,需要聲明外部的可訪問端口
全部的移植工作到這里就完畢了!
我們分別執行provider、consumer兩個獨立進程
此時我們打開nacos服務列表,會看到dubbo-nacos-consumer、dubbo-nacos-provider兩個執行中的服務
之七 2流高手速成記:基于Dubbo&amp;Nacos的微服務簡要實現

文章插圖
執行結果如下:
之七 2流高手速成記:基于Dubbo&amp;Nacos的微服務簡要實現

文章插圖
怎么樣?是不是非常神奇?我們只改動了兩個注解,原本還是一個整體的工程就被一分為二了 , 并且是兩個可以彼此獨立運轉在兩臺獨立機器上的服務
—— 這就是微服務的神奇之處!
借助于強大的SpringCloudAlibaba,我們不僅可以對所有的業務實現統合拆分 , 充分調動團隊人員配置各司其職各自編寫自己的服務模塊,
更大的意義在于我們可以充分調動多臺獨立設備的技能,使之串聯為一個龐大服務集群,較之于單臺機器實現整個架構性能成千上萬倍的飛躍!
但是,微服務帶來研發、管理、性能便捷的同時,整個集群也在運維層面面對了前所未有的挑戰 , 最明顯的:
consumer在業務上依賴于后端的provider,如果provider運轉不正常 , 前方的consumer又該如何自處?!

推薦閱讀