dubbo入門教程

1. 學習大綱

1、 瞭解什麼是dubbo

2、 我們使用dubbo能做什麼

3、 Dubbo入門

4、 Dubbo管理

2. 什麼是dubbo


2.1. 簡介

DUBBO是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,每天爲2,000+個服務提供3,000,000,000+次訪問量支持,並被廣泛應用於阿里巴巴集團的各成員站點。

 

DubboAlibaba開源的分佈式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地鬆耦合)。從服務模型的角度來看,Dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。關於註冊中心、協議支持、服務監控等內容。

2.2. RPC

 

2.3. 官網

http://dubbo.io/

 

 

2.4. 版本說明

 

 

 

 

 

我們使用2.5.3版本。

2.5. 下載

Dubbo官網並沒有提供下載服務但是dubbo將源碼託管於github並且將jar包發佈到maven的中央倉庫所以可以從githubmaven中央倉庫來下載

2.5.1. 源碼下載

https://github.com/alibaba/dubbo

 

 

2.5.2. 發佈包下載

http://repo1.maven.org/maven2/com/alibaba/dubbo/

 

 

 

 

3. 通過Maven構建dubbo(非必須)

既然可以下載得到源碼以及發佈包那麼爲什麼要去構建dubbo?,我們先來看下dubbo的主要模塊

 

 

 

其中核心框架管理控制檯簡易監控中心簡易註冊中心是我們需要的模塊,目前,只有核心模塊可以下載到,其它的均無法直接下載,所以我們需要構建dubbo

當然了在提供的資料中以及有構建好的模塊提供也可以選擇不重新構建

3.1. 導入源碼到Eclipse

 

 

先導入編譯依賴到Eclipse

 

 

再導入dubbo源碼到Eclipse

 

 

導入完成

 

3.2. 安裝hessian-lite到本地倉庫

 

3.3. 安裝opensesame到本地倉庫

 

3.4. 構建dubbo

 

 

構建完成:

 

[INFO] Reactor Summary:

[INFO]

[INFO] dubbo-parent ....................................... SUCCESS [  0.349 s]

[INFO] dubbo-common ....................................... SUCCESS [  4.351 s]

[INFO] dubbo-container .................................... SUCCESS [  0.007 s]

[INFO] dubbo-container-api ................................ SUCCESS [  0.718 s]

[INFO] dubbo-container-spring ............................. SUCCESS [  0.368 s]

[INFO] dubbo-container-jetty .............................. SUCCESS [  0.343 s]

[INFO] dubbo-container-log4j .............................. SUCCESS [  0.432 s]

[INFO] dubbo-container-logback ............................ SUCCESS [  0.431 s]

[INFO] dubbo-remoting ..................................... SUCCESS [  0.003 s]

[INFO] dubbo-remoting-api ................................. SUCCESS [  1.717 s]

[INFO] dubbo-remoting-netty ............................... SUCCESS [  0.678 s]

[INFO] dubbo-remoting-mina ................................ SUCCESS [  0.528 s]

[INFO] dubbo-remoting-grizzly ............................. SUCCESS [  0.776 s]

[INFO] dubbo-remoting-p2p ................................. SUCCESS [  0.793 s]

[INFO] dubbo-remoting-http ................................ SUCCESS [  0.781 s]

[INFO] dubbo-remoting-zookeeper ........................... SUCCESS [  0.484 s]

[INFO] dubbo-rpc .......................................... SUCCESS [  0.004 s]

[INFO] dubbo-rpc-api ...................................... SUCCESS [  1.174 s]

[INFO] dubbo-rpc-default .................................. SUCCESS [  1.051 s]

[INFO] dubbo-rpc-injvm .................................... SUCCESS [  0.367 s]

[INFO] dubbo-rpc-rmi ...................................... SUCCESS [  0.359 s]

[INFO] dubbo-rpc-hessian .................................. SUCCESS [  0.427 s]

[INFO] dubbo-rpc-http ..................................... SUCCESS [  0.415 s]

[INFO] dubbo-rpc-webservice ............................... SUCCESS [  2.279 s]

[INFO] dubbo-cluster ...................................... SUCCESS [  1.123 s]

[INFO] dubbo-registry ..................................... SUCCESS [  0.007 s]

[INFO] dubbo-registry-api ................................. SUCCESS [  0.839 s]

[INFO] dubbo-monitor ...................................... SUCCESS [  0.004 s]

[INFO] dubbo-monitor-api .................................. SUCCESS [  0.366 s]

[INFO] dubbo-filter ....................................... SUCCESS [  0.004 s]

[INFO] dubbo-filter-validation ............................ SUCCESS [  0.429 s]

[INFO] dubbo-filter-cache ................................. SUCCESS [  0.398 s]

[INFO] dubbo-registry-default ............................. SUCCESS [  0.419 s]

[INFO] dubbo-monitor-default .............................. SUCCESS [  0.370 s]

[INFO] dubbo-registry-multicast ........................... SUCCESS [  0.443 s]

[INFO] dubbo-config ....................................... SUCCESS [  0.005 s]

[INFO] dubbo-config-api ................................... SUCCESS [  1.157 s]

[INFO] dubbo-config-spring ................................ SUCCESS [  1.080 s]

[INFO] dubbo-rpc-thrift ................................... SUCCESS [  0.898 s]

[INFO] dubbo-rpc-memcached ................................ SUCCESS [  0.469 s]

[INFO] dubbo-rpc-redis .................................... SUCCESS [  0.607 s]

[INFO] dubbo-registry-zookeeper ........................... SUCCESS [  0.574 s]

[INFO] dubbo-registry-redis ............................... SUCCESS [  0.724 s]

[INFO] dubbo .............................................. SUCCESS [  5.777 s]

[INFO] dubbo-simple ....................................... SUCCESS [  0.003 s]

[INFO] dubbo-registry-simple .............................. SUCCESS [  5.491 s]

[INFO] dubbo-monitor-simple ............................... SUCCESS [ 11.807 s]

[INFO] dubbo-admin ........................................ SUCCESS [  4.867 s]

[INFO] dubbo-demo ......................................... SUCCESS [  0.003 s]

[INFO] dubbo-demo-api ..................................... SUCCESS [  0.237 s]

[INFO] dubbo-demo-provider ................................ SUCCESS [  9.309 s]

[INFO] dubbo-demo-consumer ................................ SUCCESS [  9.491 s]

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 01:16 min

[INFO] Finished at: 2016-05-31T11:22:10+08:00

[INFO] Final Memory: 73M/1725M

[INFO] ------------------------------------------------------------------------

 

3.5. 找到對應的模塊包

3.5.1. 核心框架

 

3.5.2. 管理控制檯

 

3.5.3. 簡易監控中心

 

3.5.4. 簡易註冊中心

 

4. Dubbo框架說明

4.1. 背景

 

 

4.2. 服務治理

 

4.3. 架構


 

調用關係

1. 服務容器負責啓動,加載,運行服務提供者。

2. 服務提供者在啓動時,向註冊中心註冊自己提供的服務。

3. 服務消費者在啓動時,向註冊中心訂閱自己所需的服務。

4. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。

5. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。

6. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

5. 快速入門

5.1. 實現功能

存在2個系統,A系統和B系統,A系統調用B系統的接口獲取數據,用於查詢用戶列表。

 

5.2. 安裝zookeeper

解壓得到如下:

 

 

修改配置文件zoo.cfg 該目錄必須存在

 

 

啓動zookeeper服務:

 

 

 

 

5.3. 搭建B系統

5.3.1. 創建工程

 

5.3.2. 導入依賴

<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>cn.itcast.dubbo</groupId>

<artifactId>dubbo-b</artifactId>

<version>1.0.0-SNAPSHOT</version>

<packaging>war</packaging>

 

<dependencies>

<!-- dubbo採用spring配置方式,所以需要導入spring容器依賴 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>4.1.3.RELEASE</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.6.4</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.5.3</version>

<exclusions>

<exclusion>

<!-- 排除傳遞spring依賴 -->

<artifactId>spring</artifactId>

<groupId>org.springframework</groupId>

</exclusion>

</exclusions>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.apache.tomcat.maven</groupId>

<artifactId>tomcat7-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<port>8081</port>

<path>/</path>

</configuration>

</plugin>

</plugins>

</build>

</project>

 

5.3.3. 配置log4j文件

log4j.properties

 

log4j.rootLogger=DEBUG,A1

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

 

5.3.4. 創建User對象

package cn.itcast.dubbo.pojo;

 

// 使用dubbo要求傳輸的對象必須實現序列化接口

public class User implements java.io.Serializable {

 

private static final long serialVersionUID = -2668999087589887337L;

 

private Long id;

 

private String username;

 

private String password;

 

private Integer age;

 

public Long getId() {

return id;

}

 

public void setId(Long id) {

this.id = id;

}

 

public String getUsername() {

return username;

}

 

public void setUsername(String username) {

this.username = username;

}

 

public String getPassword() {

return password;

}

 

public void setPassword(String password) {

this.password = password;

}

 

public Integer getAge() {

return age;

}

 

public void setAge(Integer age) {

this.age = age;

}

 

}

 

5.3.5. 創建UserService(接口)提供查詢服務

package cn.itcast.dubbo.service;

 

import java.util.List;

 

import cn.itcast.dubbo.pojo.User;

 

public interface UserService {

 

/**

 * 查詢所有的用戶數據

 *

 * @return

 */

public List<User> queryAll();

 

}

5.3.6. 創建UserServiceImpl實現類

package cn.itcast.dubbo.service.impl;

 

import java.util.ArrayList;

import java.util.List;

 

import cn.itcast.dubbo.pojo.User;

import cn.itcast.dubbo.service.UserService;

 

public class UserServiceImpl implements UserService {

 

/**

 * 實現查詢,這裏做模擬實現,不做具體的數據庫查詢

 */

public List<User> queryAll() {

List<User> list = new ArrayList<User>();

for (int i = 0; i < 10; i++) {

User user = new User();

user.setAge(10 + i);

user.setId(Long.valueOf(i + 1));

user.setPassword("123456");

user.setUsername("username_" + i);

list.add(user);

}

return list;

}

 

}

5.3.7. 編寫dubbo配置文件

 

 

具體配置

 

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

 

<!-- 提供方應用信息,用於計算依賴關係 -->

<dubbo:application name="dubbo-b-server" />

 

<!-- 這裏使用的註冊中心是zookeeper -->

<dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/>

 

<!-- dubbo協議在20880端口暴露服務 -->

<dubbo:protocol name="dubbo" port="20880" />

 

<!-- 將該接口暴露到dubbo-->

<dubbo:service interface="cn.itcast.dubbo.service.UserService" ref="userServiceImpl" />

 

<!-- 將具體的實現類加入到Spring容器中 -->

<bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl" />

 

 

</beans>

 

5.3.8. 導入zookeeper依賴

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.3.3</version>

</dependency>

 

<dependency>

<groupId>com.github.sgroschupf</groupId>

<artifactId>zkclient</artifactId>

<version>0.1</version>

</dependency>

5.3.9. 編寫Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<display-name>dubbo-b</display-name>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:dubbo/dubbo-*.xml</param-value>

</context-param>

<!--SpringApplicationContext 載入 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

    <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

 

</web-app>

5.3.10. 啓動tomcat

 

 

 

查看tomcat啓動日誌:

 

2016-06-03 09:38:35,307 [localhost-startStop-1] [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry]-[INFO]  [DUBBO] Register: dubbo://192.168.56.1:20880/cn.itcast.dubbo.service.UserService?anyhost=true&application=dubbo-b-server&dubbo=2.5.3&interface=cn.itcast.dubbo.service.UserService&methods=queryAll&pid=5436&side=provider×tamp=1464917914608, dubbo version: 2.5.3, current host: 127.0.0.1

 

可以看到,已經將UserService服務註冊到zookeeper註冊中心,協議採用的是dubbo

5.4. 搭建A系統

5.4.1. 創建工程

 

 

創建完成

 

 

5.4.2. 導入依賴

<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>cn.itcast.dubbo</groupId>

<artifactId>dubbo-a</artifactId>

<version>0.0.1-SNAPSHOT</version>

 

<dependencies>

<!-- dubbo採用spring配置方式,所以需要導入spring容器依賴 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>4.1.3.RELEASE</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.6.4</version>

</dependency>

 

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.5.3</version>

<exclusions>

<exclusion>

<!-- 排除傳遞spring依賴 -->

<artifactId>spring</artifactId>

<groupId>org.springframework</groupId>

</exclusion>

</exclusions>

</dependency>

 

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.3.3</version>

</dependency>

 

<dependency>

<groupId>com.github.sgroschupf</groupId>

<artifactId>zkclient</artifactId>

<version>0.1</version>

</dependency>

</dependencies>

</project>

5.4.3. 配置log4j文件

log4j.properties

 

log4j.rootLogger=DEBUG,A1

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

5.4.4. b系統中拷貝User對象UserService接口道a系統

 

5.4.5. 編寫dubbo配置文件

 

 

dubbo-consumer.xml

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd

http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

 

<!-- 提供方應用信息,用於計算依賴關係 -->

<dubbo:application name="dubbo-a-consumer" />

 

<!-- 這裏使用的註冊中心是zookeeper -->

<dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/>

<!-- 從註冊中心中查找服務 -->

<dubbo:reference id="userService" interface="cn.itcast.dubbo.service.UserService"/>

 

</beans>

5.4.6. 編寫UserService測試用例

 

 

package cn.itcast.dubbo.service;

 

import static org.junit.Assert.*;

 

import java.util.List;

 

import org.junit.Before;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import cn.itcast.dubbo.pojo.User;

 

public class UserServiceTest {

 

private UserService userService;

 

@Before

public void setUp() throws Exception {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

"classpath:dubbo/*.xml");

this.userService = applicationContext.getBean(UserService.class);

}

 

@Test

public void testQueryAll() {

List<User> users = this.userService.queryAll();

for (User user : users) {

System.out.println(user);

}

}

 

}

 

 

5.4.7. 查看效果

 

 

可以看到已經查詢到10條數據,那麼,也就是說A系統通過B系統提供的服務獲取到了數據。

5.5. 解決代碼重複問題

通過剛剛的示例我們可以發現,其中User對象和UserServiceA系統和B系統中都使用,那麼,我們是否應該講該代碼複用呢?

 

答案是肯定的。

 

在使用dubboprovider需要將提供服務所需要的java代碼(beaninterface等)單獨打包成jar提供給consumer使用。

 

5.5.1. 創建dubbo-b-api

 

 

5.5.2. dubbo-b中的pojoservice接口移動到dubbo-b-api

 

 

結果如下:

 

5.5.3. dubbo-bpom.xml文件中添加dubbo-b-api的依賴

 

5.5.4. dubbo-apom.xml文件中添加dubbo-b-api的依賴,並且將pojoservice接口刪除

 

 

 

刪除代碼

 

5.5.5. 測試

 

 

測試發現和之前實現一樣

6. 監控

 

 

 

原理:服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

6.1. 搭建監控服務

 

6.2. 修改配置文件

 

 

修改註冊中心的地址

 

6.3. dubbo-b中配置監控

 

6.4. 啓動

 

 

啓動成功


 

6.5. 查看界面

輸入地址http://127.0.0.1:8088/

 

 

 

說明端口在這裏指定

 

6.6. 功能

查看服務

 

 

統計

 

 

圖表

 

7. 管理

dubbo提供了一套在線管理整個服務的功能,管理控制檯爲阿里內部裁剪版本,開源部分主要包含:路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。

 

7.1. 安裝

dubbo-admin-2.5.3.war部署到tomcatwebapps目錄下

 

7.2. 修改配置文件

 

7.3. 啓動tomcat

 

 


 

 

7.4. 查看管理界面

使用用戶登錄

 

 

http://127.0.0.1:8080/

效果

 

 

功能:

 

8. dubbo的配置詳解

8.1. <dubbo:protocol/>

服務提供者協議配置:
配置類:com.alibaba.dubbo.config.ProtocolConfig
說明:如果需要支持多協議,可以聲明多個<dubbo:protocol>標籤,並在<dubbo:service>中通過protocol屬性指定使用的協議。

標籤

屬性

對應URL參數

類型

是否必填

缺省值

作用

描述

兼容性

<dubbo:protocol>

id

 

string

可選

dubbo

配置關聯

協議BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,缺省和name屬性值一樣,重複則在name後加序號。

2.0.5以上版本

<dubbo:protocol>

name

<protocol>

string

必填

dubbo

性能調優

協議名稱

2.0.5以上版本

<dubbo:protocol>

port

<port>

int

可選

dubbo協議缺省端口爲20880rmi協議缺省端口爲1099httphessian協議缺省端口爲80 
如果配置爲-1 或者 沒有配置port,則會分配一個沒有被佔用的端口。Dubbo 2.4.0+,分配的端口在協議缺省端口的基礎上增長,確保端口段可控。

服務發現

服務端口

2.0.5以上版本

<dubbo:protocol>

host

<host>

string

可選

自動查找本機IP

服務發現

-服務主機名,多網卡選擇或指定VIP及域名時使用,爲空則自動查找本機IP-建議不要配置,讓Dubbo自動獲取本機IP

2.0.5以上版本

<dubbo:protocol>

threadpool

threadpool

string

可選

fixed

性能調優

線程池類型,可選:fixed/cached

2.0.5以上版本

<dubbo:protocol>

threads

threads

int

可選

100

性能調優

服務線程池大小(固定大小)

2.0.5以上版本

<dubbo:protocol>

iothreads

threads

int

可選

cpu個數+1

性能調優

io線程池大小(固定大小)

2.0.5以上版本

<dubbo:protocol>

accepts

accepts

int

可選

0

性能調優

服務提供方最大可接受連接數

2.0.5以上版本

<dubbo:protocol>

payload

payload

int

可選

88388608(=8M)

性能調優

請求及響應數據包大小限制,單位:字節

2.0.5以上版本

<dubbo:protocol>

codec

codec

string

可選

dubbo

性能調優

協議編碼方式

2.0.5以上版本

<dubbo:protocol>

serialization

serialization

string

可選

dubbo協議缺省爲hessian2rmi協議缺省爲javahttp協議缺省爲json

性能調優

協議序列化方式,當協議支持多種序列化方式時使用,比如:dubbo協議的dubbo,hessian2,java,compactedjava,以及http協議的json

2.0.5以上版本

<dubbo:protocol>

accesslog

accesslog

string/boolean

可選

 

服務治理

設爲true,將向logger中輸出訪問日誌,也可填寫訪問日誌文件路徑,直接把訪問日誌輸出到指定文件

2.0.5以上版本

<dubbo:protocol>

path

<path>

string

可選

 

服務發現

提供者上下文路徑,爲服務path的前綴

2.0.5以上版本

<dubbo:protocol>

transporter

transporter

string

可選

dubbo協議缺省爲netty

性能調優

協議的服務端和客戶端實現類型,比如:dubbo協議的mina,netty等,可以分拆爲serverclient配置

2.0.5以上版本

<dubbo:protocol>

server

server

string

可選

dubbo協議缺省爲nettyhttp協議缺省爲servlet

性能調優

協議的服務器端實現類型,比如:dubbo協議的mina,netty等,http協議的jetty,servlet

2.0.5以上版本

<dubbo:protocol>

client

client

string

可選

dubbo協議缺省爲netty

性能調優

協議的客戶端實現類型,比如:dubbo協議的mina,netty

2.0.5以上版本

<dubbo:protocol>

dispatcher

dispatcher

string

可選

dubbo協議缺省爲all

性能調優

協議的消息派發方式,用於指定線程模型,比如:dubbo協議的all, direct, message, execution, connection

2.1.0以上版本

<dubbo:protocol>

queues

queues

int

可選

0

性能調優

線程池隊列大小,當線程池滿時,排隊等待執行的隊列大小,建議不要設置,當線程程池時應立即失敗,重試其它服務提供機器,而不是排隊,除非有特殊需求。

2.0.5以上版本

<dubbo:protocol>

charset

charset

string

可選

UTF-8

性能調優

序列化編碼

2.0.5以上版本

<dubbo:protocol>

buffer

buffer

int

可選

8192

性能調優

網絡讀寫緩衝區大小

2.0.5以上版本

<dubbo:protocol>

heartbeat

heartbeat

int

可選

0

性能調優

心跳間隔,對於長連接,當物理層斷開時,比如拔網線,TCPFIN消息來不及發送,對方收不到斷開事件,此時需要心跳來幫助檢查連接是否已斷開

2.0.10以上版本

<dubbo:protocol>

telnet

telnet

string

可選

 

服務治理

所支持的telnet命令,多個命令用逗號分隔

2.0.5以上版本

<dubbo:protocol>

register

register

boolean

可選

true

服務治理

該協議的服務是否註冊到註冊中心

2.0.8以上版本

<dubbo:protocol>

contextpath

contextpath

String

可選

缺省爲空串

服務治理

 

2.0.6以上版本

 

8.2. 協議

dubbo提供的協議有

 

 

8.2.1. dubbo://

Dubbo缺省協議採用單一長連接和NIO異步通訊,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的情況。

 

Dubbo缺省協議不適合傳送大數據量的服務,比如傳文件,傳視頻等,除非請求量很低。

 

配置:

 

 

執行過程

 

 

默認連接

 

 

限制最大連接

 

8.3. <dubbo:registry/>

註冊中心配置:

配置類:com.alibaba.dubbo.config.RegistryConfig

說明:如果有多個不同的註冊中心,可以聲明多個<dubbo:registry>標籤,並在<dubbo:service><dubbo:reference>registry屬性指定使用的註冊中心。

 

標籤

屬性

對應URL參數

類型

是否必填

缺省值

作用

描述

兼容性

<dubbo:registry>

id

 

string

可選

 

配置關聯

註冊中心引用BeanId,可以在<dubbo:service registry="">或<dubbo:reference registry="">中引用此ID

1.0.16以上版本

<dubbo:registry>

address

<host:port>

string

必填

 

服務發現

註冊中心服務器地址,如果地址沒有端口缺省爲9090,同一集羣內的多個地址用逗號分隔,如:ip:port,ip:port,不同集羣的註冊中心,請配置多個<dubbo:registry>標籤

1.0.16以上版本

<dubbo:registry>

protocol

<protocol>

string

可選

dubbo

服務發現

注同中心地址協議,支持dubbo, http, local三種協議,分別表示,dubbo地址,http地址,本地註冊中心

2.0.0以上版本

<dubbo:registry>

port

<port>

int

可選

9090

服務發現

註冊中心缺省端口,當address沒有帶端口時使用此端口做爲缺省值

2.0.0以上版本

<dubbo:registry>

username

<username>

string

可選

 

服務治理

登錄註冊中心用戶名,如果註冊中心不需要驗證可不填

2.0.0以上版本

<dubbo:registry>

password

<password>

string

可選

 

服務治理

登錄註冊中心密碼,如果註冊中心不需要驗證可不填

2.0.0以上版本

<dubbo:registry>

transport

registry.transporter

string

可選

netty

性能調優

網絡傳輸方式,可選mina,netty

2.0.0以上版本

<dubbo:registry>

timeout

registry.timeout

int

可選

5000

性能調優

註冊中心請求超時時間(毫秒)

2.0.0以上版本

<dubbo:registry>

session

registry.session

int

可選

60000

性能調優

註冊中心會話超時時間(毫秒),用於檢測提供者非正常斷線後的髒數據,比如用心跳檢測的實現,此時間就是心跳間隔,不同註冊中心實現不一樣。

2.1.0以上版本

<dubbo:registry>

file

registry.file

string

可選

 

服務治理

使用文件緩存註冊中心地址列表及服務提供者列表,應用重啓時將基於此文件恢復,注意:兩個註冊中心不能使用同一文件存儲

2.0.0以上版本

<dubbo:registry>

wait

registry.wait

int

可選

0

性能調優

停止時等待通知完成時間(毫秒)

2.0.0以上版本

<dubbo:registry>

check

check

boolean

可選

true

服務治理

註冊中心不存在時,是否報錯

2.0.0以上版本

<dubbo:registry>

register

register

boolean

可選

true

服務治理

是否向此註冊中心註冊服務,如果設爲false,將只訂閱,不註冊

2.0.5以上版本

<dubbo:registry>

subscribe

subscribe

boolean

可選

true

服務治理

是否向此註冊中心訂閱服務,如果設爲false,將只註冊,不訂閱

2.0.5以上版本

<dubbo:registry>

dynamic

dynamic

boolean

可選

true

服務治理

服務是否動態註冊,如果設爲false,註冊後將顯示後disable狀態,需人工啓用,並且服務提供者停止時,也不會自動取消冊,需人工禁用。

2.0.5以上版本

8.4. 註冊中心

8.4.1. zookeeper註冊中心

 

 

原理

 

 

流程說明:

服務提供者啓動時

/dubbo/com.foo.BarService/providers目錄下寫入自己的URL地址。

服務消費者啓動時

訂閱/dubbo/com.foo.BarService/providers目錄下的提供者URL地址。

並向/dubbo/com.foo.BarService/consumers目錄下寫入自己的URL地址。

監控中心啓動時

訂閱/dubbo/com.foo.BarService目錄下的所有提供者和消費者URL地址。

 

 

支持以下功能:

當提供者出現斷電等異常停機時,註冊中心能自動刪除提供者信息。

當註冊中心重啓時,能自動恢復註冊數據,以及訂閱請求。

當會話過期時,能自動恢復註冊數據,以及訂閱請求。

當設置<dubbo:registry check="false" />時,記錄失敗註冊和訂閱請求,後臺定時重試。

可通過<dubbo:registry username="admin" password="1234" />設置zookeeper登錄信息。

可通過<dubbo:registry group="dubbo" />設置zookeeper的根節點,不設置將使用無根樹。

支持*號通配符<dubbo:reference group="*" version="*" />,可訂閱服務的所有分組和所有版本的提供者。

 

zkClient的使用

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章