1. 程式人生 > >Dubbo直連方式

Dubbo直連方式

[TOC] ## 一、dubbo概述 Apache Dubbo 是一款高效能、輕量級的開源 Java RPC 框架,它提供了三大核心能力: - 面向介面的遠端方法呼叫, - 智慧容錯和負載均衡, - 服務自動註冊和發現。 Dubbo 是一個分散式服務框架,致力於提供高效能和透明化的 RPC 遠端服務呼叫方案、 服務治理方案。 官網: **特性:** ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231332620-1627733466.png) `面向介面代理:` 呼叫介面的方法,在 A 伺服器呼叫 B 伺服器的方法,由 dubbo 實現對 B 的呼叫,無需關心實現的細節,就像 MyBatis 訪問 Dao 的介面,可以操作資料庫一樣。不用關心 Dao 介面方法的實現 ### 1. 基本架構 ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231338035-1761068831.png) **服務提供者(Provider)**:暴露服務的服務提供方,服務提供者在啟動時,向註冊中心註冊自己提供的服務。 **服務消費者(Consumer )**: 呼叫遠端服務的服務消費方,服務消費者在啟動時,向註冊中心訂閱自己所需的服務,服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。 **註冊中心(Registry)** :註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者 **監控中心(Monitor)** :服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心 `呼叫關係說明` 1. 服務容器負責啟動,載入,執行服務提供者 2. 服務提供者在啟動時,向註冊中心註冊自己提供的服務 3. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務 4. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者 5. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫 6. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心 ### 2. dubbo 支援的協議 支援多種協議:dubbo , hessian , rmi , http, webservice , thrift , memcached , redis。dubbo 官方推薦使用 dubbo 協議。dubbo 協議預設埠 20880 使用 dubbo 協議,spring 配置檔案加入: `
` ## 二、直連方法 點對點的直連專案:消費者直接訪問服務提供者,沒有註冊中心。消費者必須指定服務提供者的訪問地址(url) 消費者直接通過 url 地址訪問固定的服務提供者。這個 url 地址是不變的。 ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231349482-1478822148.png) ## 三、建立服務提供者 ### 1. 思路 1. 建立一個maven web工程:服務的提供者 2. 建立一個實體bean查詢的結果,實現Serializable介面 3. 提供一個服務介面:xxxx 4. 實現這個服務介面:xxxxImpl 5. 配置dubbo服務提供者的核心配置檔案 - 宣告dubbo服務提供者的名稱:保證唯一 - 宣告dubbo使用的協議和埠號 - 暴露服務,使用直連方式 6. 新增監聽器 ### 1. 建立maven web ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231359166-101954944.png) 並新增對應的目錄 ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231405651-1047125032.png) ### 2. pom.xml 添加了dubbo依賴 ```xml
4.0.0 com.md 01-link-userservice-provider 1.0.0 war UTF-8 1.8 1.8 junit junit 4.11 test org.springframework spring-context 4.3.16.RELEASE org.springframework spring-webmvc 4.3.16.RELEASE
com.alibaba dubbo 2.6.2
src/main/java **/*.properties **/*.xml false
``` ### 3. 建立實體 ```java package com.md.dubbo.model; import java.io.Serializable; /** * @author MD * @create 2020-08-16 21:30 */ // model實現序列化 public class User implements Serializable { private Integer id; private String username; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ``` ### 4. 建立服務介面並實現 ```java package com.md.dubbo.service; import com.md.dubbo.model.User; /** * @author MD * @create 2020-08-16 21:35 */ public interface UserService { /** * 根據使用者標識獲取使用者資訊 * @param id * @return */ User queryUserById(Integer id); } //--------------------------------------- package com.md.dubbo.service.impl; import com.md.dubbo.model.User; import com.md.dubbo.service.UserService; /** * @author MD * @create 2020-08-16 21:38 */ public class UserServiceImpl implements UserService { @Override public User queryUserById(Integer id) { // 模擬 User user = new User(); user.setId(id); user.setUsername("pony"); user.setAge(20); return user; } } ``` ### 5. 配置服務提供者的核心配置檔案 在resources目錄下建立dubbo-userservice-provider.xml檔案 ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231421055-751456521.png) **這裡注意:選擇apache的這個** ```xml ``` ### 6. 新增監聽器 在web.xml中 ```xml contextConfigLocation classpath:dubbo-userservice-provider.xml org.springframework.web.context.ContextLoaderListener ``` ### 7. 配置Tomcat **埠號注意修改一下:** HTTP port :8081 JMX port:1098 ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231432845-240837699.png) ### 8. 安裝本地jar到maven倉庫 服務介面中的方法要給消費者使用,消費者專案需要知道介面名稱和介面中的方法名稱、引數等。這些資訊服務提供者才知道。需要把介面的 class 檔案打包為 jar . 服務介面專案的類檔案打包為 jar, 安裝到 maven 倉庫,倉庫中的提供者 jar 可以被消費者使用。 `使用 idea 的 maven 視窗執行 install` ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231439108-690020212.png) ## 四、建立服務消費者 ### 1. 思路 1. 建立一個maven web工程:服務的消費者 2. 配置pom檔案:新增需要的依賴(spring,dubbo) 3. 設定dubbo的核心配置檔案 4. 編寫controller 5. 配置中央排程器(就是一個servlet:DispatcherServlet) 基本和服務提供者一樣,這裡就說一些主要的 ### 1. pom.xml 還是maven web專案 `注意:添加了服務提供者的依賴` ```xml 4.0.0 com.md 02-link-consumer 1.0.0 war UTF-8 1.8 1.8 junit junit 4.11 test org.springframework spring-context 4.3.16.RELEASE org.springframework spring-webmvc 4.3.16.RELEASE com.alibaba dubbo 2.6.2 com.md 01-link-userservice-provider 1.0.0 src/main/java **/*.properties **/*.xml false ``` ### 2. 配置服務消費者的核心配置檔案 在resources目錄下建立dubbo-consumer.xml檔案 ```xml ``` ### 3. controller ```java package com.md.dubbo.web; import com.md.dubbo.model.User; import com.md.dubbo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; /** * @author MD * @create 2020-08-19 9:00 */ @Controller public class UserController { // 自動注入 @Autowired private UserService userService; @RequestMapping(value = "/user") public String userDetail(Model model , Integer id){ User user = userService.queryUserById(id); model.addAttribute("user",user); return "userDetail"; } } ``` ### 4. applicationContext.xml 在resources目錄下建立spring配置檔案 ```xml ``` ### 5. 配置中央排程器 在web.xml中 ```xml dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:applicationContext.xml,classpath:dubbo-consumer.xml dispatcherServlet / ``` ### 6. 配置Tomcat 和上面一樣,只不過不用修改埠號了 ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231512594-77540775.png) ### 7. 配置測試頁面 在webapp下 建立userDetail.jsp ```jsp <%-- Created by IntelliJ IDEA. User: MD Date: 2020/8/19 Time: 9:06 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> 使用者詳情

使用者詳情

使用者標識:${user.id} 使用者名稱稱:${user.username} 使用者年齡:${user.age} ``` ### 8. 測試 1. 首先開服務提供者的Tomcat 2. 然後開服務消費者的Tomcat 3. 然後在位址列輸入,就可以看到了 ![](https://img2020.cnblogs.com/blog/1212924/202008/1212924-20200821231519260-1369397