Dubbo入门(一)
目錄
一、Dubbo核心概念
1.簡介
2.基本概念
3.Dubbo環境搭建(windows)
(1)安裝zookeeper
(2)安裝dubbo-admin管理控制臺
二、快速入門
gmail-interface模塊
user-service-provider模塊
user-service-consumer模塊
一、Dubbo核心概念
1.簡介
-
Apache Dubbo (incubating) 是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。
2.基本概念
-
服務提供者(Provider):暴露服務的服務提供方,服務提供者在啟動時,向注冊中心注冊自己提供的服務。
-
服務消費者(Consumer): 調用遠程服務的服務消費方,服務消費者在啟動時,向注冊中心訂閱自己所需的服務,服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
-
注冊中心(Registry):注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者
-
監控中心(Monitor):服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心
-
調用關系說明
-
服務容器負責啟動,加載,運行服務提供者
-
服務提供者在啟動時,向注冊中心注冊自己提供的服務
-
服務消費者在啟動時,向注冊中心訂閱自己所需的服務
-
注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者
-
服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用
-
服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心
-
3.Dubbo環境搭建(windows)
(1)安裝zookeeper
1)下載zookeeper
https://archive.apache.org/dist/zookeeper/
2)解壓zookeeper
解壓運行zkServer.cmd ,初次運行會報錯,沒有zoo.cfg配置文件
3)修改zoo.cfg配置文件
將conf下的zoo_sample.cfg復制一份改名為zoo.cfg即可。
注意幾個重要位置:
dataDir=./ 臨時數據存儲的目錄(可寫相對路徑)
clientPort=2181 zookeeper的端口號
修改完成后再次啟動zookeeper
4)使用zkCli.cmd測試
ls /:列出zookeeper根下保存的所有節點
create –e /yfy 123:創建一個yfy節點,值為123
get /yfy:獲取/yfy節點的值
(2)安裝dubbo-admin管理控制臺
dubbo本身并不是一個服務軟件。它其實就是一個jar包能夠幫你的java程序連接到zookeeper,并利用zookeeper消費、提供服務。所以你不用在Linux上啟動什么dubbo服務。
但是為了讓用戶更好的管理監控眾多的dubbo服務,官方提供了一個可視化的監控程序,不過這個監控即使不裝也不影響使用。
1)下載dubbo-admin
https://github.com/apache/incubator-dubbo-ops
2)進入目錄,修改dubbo-admin配置
修改 src\main\resources\application.properties 指定zookeeper地址
3)打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
4)運行dubbo-admin
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
注:默認使用root/root 登陸
二、快速入門
gmail-interface模塊
UserAddress.java
public class UserAddress implements Serializable {private Integer id;private String userAddress; //用戶地址private String userId; //用戶idprivate String consignee; //收貨人private String phoneNum; //電話號碼private String isDefault; //是否為默認地址 ? Y-是 ? ? N-否 }UserService.java
public interface UserService {/*** 按照用戶id返回所有的收貨地址* @param userId* @return*/public List<UserAddress> getUserAddressList(String userId); }user-service-provider模塊
UserService.java
import com.alibaba.dubbo.config.annotation.Service; ? //必須為alibaba的@Service @Service public class UserServiceImpl implements UserService { ?@Overridepublic List<UserAddress> getUserAddressList(String userId) {UserAddress address1 = new UserAddress(1, "北京朝陽", "1", "李老師", "10086", "Y");UserAddress address2 = new UserAddress(2, "山西太原)", "1", "王老師", "100000", "N");return Arrays.asList(address1, address2);} ? }provider.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans ? ? ? http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ? ? ? http://dubbo.apache.org/schema/dubbo ? ? ? http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> ?<!-- 指定當前服務/應用的名字 --><dubbo:application name="user-service-provider" ?/> ?<!-- 指定注冊中心的位置 --><dubbo:registry address="zookeeper://127.0.0.1:2181" /> ?<!-- 用dubbo協議在20880端口暴露服務 --><dubbo:protocol name="dubbo" port="20880" /> ?<!-- 聲明需要暴露的服務接口 --><dubbo:annotation package="com.itheima.gmall.service.impl"></dubbo:annotation> </beans>pom.xml
? ?<dependencies><dependency><groupId>com.itheima</groupId><artifactId>gmail-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- 引入dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><!-- 注冊中心使用的是zookeeper --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency></dependencies>MainApplication.java
public class MainApplication {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"});context.start();System.in.read(); // 按任意鍵退出} }user-service-consumer模塊
OrderService.java
import com.alibaba.dubbo.config.annotation.Reference; ? @Service public class OrderServiceImpl implements OrderService { ?//使用dubbo提供的reference注解引用遠程服務@Referenceprivate UserService userService; ?@Overridepublic void initOrder(String userId) {List<UserAddress> addressList = userService.getUserAddressList("1");for (UserAddress userAddress : addressList) {System.out.println(userAddress);}} }consumer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans ? ? ? http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ? ? ? http://dubbo.apache.org/schema/dubbo ? ? ? http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> ?<context:component-scan base-package="com.itheima.gmall.service.impl"/> ?<!-- 消費方應用名,用于計算依賴關系,不是匹配條件,不要與提供方一樣 --><dubbo:application name="order-service-consumer"/> ?<!-- 指定注冊中心的位置 --><dubbo:registry address="zookeeper://127.0.0.1:2181" /> ?<dubbo:annotation package="com.itheima.gmall.service"></dubbo:annotation> ? </beans>pom.xml
<dependencies><dependency><groupId>com.itheima</groupId><artifactId>gmail-interface</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- 引入dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.2</version></dependency><!-- 注冊中心使用的是zookeeper --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.12.0</version></dependency></dependencies>MainApplication.java
public class MainApplication { ?public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");context.start();OrderService orderService =context.getBean(OrderService.class); // 獲取遠程服務代理orderService.initOrder("1"); // 執行遠程方法System.out.println("調用完成");System.in.read();} } ?-
開啟zookeeeper,啟動user-service-provider模塊的MainApplication.java,然后啟動user-service-consumer模塊的MainApplication.java,可以調用成功。
總結
以上是生活随笔為你收集整理的Dubbo入门(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSM的整合
- 下一篇: dubbo配置(一)