二、dubbo 之 RPC
dubbo 提供了面向介面代理的高效能RPC呼叫
1. 什麼是 PRC ?
RPC(Remote Procedure Call)—遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI網路通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網路分散式多程式在內的應用程式更加容易。

網路7層模型
2. 為什麼要用 PRC ?
由於業務快速的增加,流量快速增加,需要針對業務域的不同拆成不同的系統、甚至不同的系統相同的基礎服務需要抽取出來做成基礎服務的時候,就需要 RPC 技術來解耦不同的系統、或者服務之間的呼叫,從而進行訊息通訊。
3.PRC 框架
有很多實現了RPC 功能的框架,它們被稱為RPC框架:有CORBAR、Thrift、Dubbo 等等。它們有兩類,一種跨語言、一種單一語言
dubbo就是一個分散式的跨語言的高效能的 RPC 框架
4. 註冊中心
Dubbo 支援多種註冊中心:
Multicast 註冊中心
Zookeeper 註冊中心
Redis 註冊中心
Simple 註冊中心
dubbo 推薦使用 Zookeeper 作為 註冊中心 上篇文章已經介紹了安裝 Zookeeper
Zookeeper 簡單介紹: Zookeeper 是 Apache Hadoop 專案的一個子專案發展過來,現在已經作為了 Apache 的頂級專案,為分散式應用提供了高效及可靠的服務協調。諸如:統一命名服務、配置管理、分散式鎖等分散式基礎服務功能,在解決分散式資料的時候採用了 ZAB 的一致性協議
5.開發服務應用
5.1 服務介面應用 dubbo-zj-demo-api
public interface DemoService { String sayHello(String name); }
5.2 服務提供者 dubbo-zj-demo-provider

工程結構
- pom檔案
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.zj.dubbo.demo</groupId> <artifactId>dubbo-zj-demo-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>dubbo-zj-demo-consumer</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.3</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.11.1</version> </dependency> <dependency> <groupId>org.zj.dubbo.demo</groupId> <artifactId>dubbo-zj-demo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
- 服務註冊
public class DubboZjDemoProviderApplication { public static void main(String[] args) throws IOException { ServiceConfig<DemoService> serviceConfig = new ServiceConfig<DemoService>(); // 定義服務名 serviceConfig.setApplication(new ApplicationConfig("first-dubbo-provider")); // 向 zookeeper 註冊中心註冊服務 serviceConfig.setRegistry(new RegistryConfig("zookeeper://192.168.1.188:2181")); // 定義 PRC 協議 serviceConfig.setProtocol(new ProtocolConfig("dubbo", 20880)); // 釋出服務介面 serviceConfig.setInterface(DemoService.class); // 釋出服務介面實現 serviceConfig.setRef(new DemoServiceImpl()); //釋出服務 serviceConfig.export(); System.in.read(); } }
5.3 服務呼叫者(消費) dubbo-zj-demo-consumer

工程結構
- 服務註冊
public class DubboZjDemoConsumerApplication { public static void main(String[] args) { ReferenceConfig<DemoService> referenceConfig = new ReferenceConfig<DemoService>(); referenceConfig.setApplication(new ApplicationConfig("first-dubbo-consumer")); referenceConfig.setRegistry(new RegistryConfig("zookeeper://192.168.1.188:2181")); referenceConfig.setInterface(DemoService.class); // 呼叫服務 DemoService greetingService = referenceConfig.get(); System.out.println(greetingService.sayHello("world")); } }
6 下載原始碼: ofollow,noindex">https://github.com/cqzhangjian/dubbo-rpc.git
7.管理控制檯安裝
管理控制檯下載地址: https://github.com/cqzhangjian/incubator-dubbo-ops.git

管理控制檯