分散式理論 & RPC & Dubbo
分散式服務框架(RPC)
用於提高機器利用率的資源排程和治理中心*(SOA)[ Service Oriented Architecture]
Dubbo(RPC框架)
服務提供者**(Provider)**:暴露服務的服務提供方,服務提供者在啟動時,向註冊中心註冊自己提 供的服務。
服務消費者**(Consumer)**: 呼叫遠端服務的服務消費方,服務消費者在啟動時,向註冊中心訂閱自 己所需的服務,服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如 果呼叫失敗,再選另一臺呼叫。
註冊中心**(Registry)**:註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基 於長連線推送變更資料給消費者
監控中心**(Monitor)**:服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘發 送一次統計資料到監控中心
薦我們使用Zookeeper 註冊中心
Zookeeper官網:https://zookeeper.apache.org/
下載地址:https://archive.apache.org/dist/zookeeper/
修改zkServer.cmd 新增"-Dzookeeper.audit.enable=true"
先開啟服務端,再開啟客戶端
簡單測試使用
s /:列出zookeeper根下儲存的所有節點 create –e /oop 123:建立一個oop節點,值為123 get/oop:獲取/kuangshen節點的值
安裝Dubbo
dubbo-admin-master-0.2.0\dubbo-admin\src\main\resources #註冊中心的地址 注意埠號 dubbo.registry.address=zookeeper://127.0.0.1:2181
在專案目錄下打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
若是沒有配置maven環境(用的IDEA的)
把dubbo-admin在idea中開啟(執行main方法)就行(記得提前開啟Zookeeper服務)
訪問
http://localhost:7001/ (賬號密碼都是root)
dubbo-admain: 是一個監控管理後臺 ,檢視我們註冊了哪些服務,哪些服務被消費
搭建一個簡單的環境
流程:
provider--->註冊中心--->consumer
建立好provider專案(做好服務)與consumer專案
先開啟zkServer,然後開啟provider,再開啟dubbo-admin就可以在介面中檢視到相關的服務提供者,然後consumer去獲取需要的服務就行
2.讓provider連線註冊中心
匯入依賴
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>5.2.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>5.2.1</version> </dependency> <!-- 注意 zookeeper 日誌衝突--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.3</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>View Code
配置
server.port=8001 #服務應用名字 dubbo.application.name=provider-server #註冊中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服務要被註冊 dubbo.scan.base-packages=com.ljm.serviceView Code
加註解 2個
//服務註冊與發現 @Service //注入bean @DubboService //註冊中心相關 ,專案啟動就自動註冊到註冊中心 public class TIcketServiceImpl implements TIcketService{ @Override public String getTicket() { return "您的票號55678"; } }View Code
啟動dubbo-admin( 訪問http://localhost:7001/)
3.consumer消費
匯入依賴(與provider相同)
建立一個與provider相同的介面
配置
server.port=8002 #去哪裡拿服務 需要暴露自己的名字 dubbo.application.name=consumer-server #註冊中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181View Code
獲取服務
@Service public class UserService1 { @DubboReference //引用 也可以用pom座標,可以定義路徑相同的介面名 TIcketService ICKET_SERVICE; //與provider相同的介面 public void buyTicker(){ String ticket = ICKET_SERVICE.getTicket(); System.out.println("拿到票:"+ticket); } } //測試 @SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService1 userService1; @Test void contextLoads() { userService1.buyTicker(); } }View Code