sql 語句管理
阿新 • • 發佈:2020-10-23
正式步入分散式的學習了
1. Dubbo是什麼
Dubbo是一個RPC框架,簡單來說就是實現不同主機間的功能呼叫的框架,其中需要建立網路連線以及引數傳遞需要的序列化操作,這二者影響了RPC框架的速度,RPC介紹
我們開發的架構發展:
- 單一應用架構:站點流量小,只需一個所有功能都部署在一起的應用,此時關鍵用ORM框架可簡化開發
- 垂直應用架構:訪問量增大,單一應用的叢集部署帶來的加速度減緩,此時關鍵將應用拆分成互不相干的幾個應用獨立部署到不同機器上,此時應用上了MVC框架
- 分散式服務架構:垂直應用增多,應用之間存在互動,那麼應將互動的核心業務抽取出來作為獨立的服務形成服務中心,此時關鍵用提高業務複用及整合的分散式服務框架
- 流動計算架構(SOA):服務越來越多,不同服務的訪問壓力和佔有資源容易出現浪費,此時關鍵增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率(哪個服務壓力大就對應就增加幾臺機器)
2. 架構流程
- RPC框架容器啟動,然後初始化服務
- 提供者把服務註冊到註冊中心
- 消費者向註冊中心訂閱所需服務
- 若服務功能有所改變,那麼會通過長連線推送給消費者
- 遠端呼叫(同步的)
- 呼叫資訊,呼叫時間會定時非同步發給監控中心
3. 環境搭建
3.1 註冊中心
官方推薦使用 ZooKeeper 來作為註冊中心
3.2 監控中心
Dubbo的監控中心是前後端分離的,前端Vue,後端SpringBoot
具體可參考 官方文件部署
筆者在本地搭建全部環境,然後埠弄了一團糟,這裡需要注意:
- ZooKeeper啟動佔用2181,8080埠
- 監控中心的後端SpringBoot預設也是8080,需要自行修改,比如:server.port=8088
- 監控中心的前端Vue預設代理8080,自行修改vue.config.js,要和後端埠一致:target: ''http://localhost:8088/''
4. SpringBoot搭建Dubbo
使用註解和配置檔案方式來配置
4.1 新增依賴、開啟Dubbo註解
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- 操作Zookeeper的,starter裡面沒有自帶,因為註冊中心自己選擇 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.2.0</version> </dependency>
// 主應用函式上添加註解
@EnableDubbo
@SpringBootApplication
public class XXXXApplication {
public static void main(String[] args) {
SpringApplication.run(XXXXApplication.class, args);
}
}
4.2 Provider
- 編寫介面及其實現類(舉例一個兩數之和)
@Service // 向註冊中心暴露服務,是Dubbo的註解
@Component // IOC加入容器,別和@Service的業務層搞混
public class SumServiceImpl implements SumService {
@Override
public int sum(int a, int b) {
return a+b;
}
}
- 配置檔案properties
# provider的應用名字,用於計算依賴關係
dubbo.application.name=com.howl.dubbo.provider
# 註冊中心地址、通訊協議
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.protocol=zookeeper
# 與消費者通訊的協議、埠號
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
4.3 Consumer
- 在需要遠端呼叫的屬性上加入@Reference註解,則會進行動態代理
@RestController
public class SumController {
@Reference
SumService sumService;
@GetMapping("/")
public String sum(Integer a,Integer b){
return String.valueOf( sumService.sum(a,b) );
}
}
- 配置檔案properties
# consumer的應用資訊,用於計算依賴關係
dubbo.application.name=com.howl.dubbo.consumer
# 註冊中心地址、協議
dubbo.registry.address=zookeeper://127.0.0.1:2181
注意:
Consumer的介面全限定類名一定要和Provider的一致,否則Zookeeper裡面路徑不同,找不到提供者
Dubbo推薦將服務介面、服務模型、服務異常等均放在 API 包中,這樣二者就實現共享
至此Dubbo的簡單入門就完成了,下一篇會加入Dubbo的配置、原理、高可用等筆記