Dubbo入門微服務框架學習
Dubbo入門筆記
Dubbo官網:http://dubbo.apache.org/zh-cn/
Dubbo官方推薦使用Zookeeper作為服務註冊中心,Zookeeper 是 Apache Hadoop 的子專案,是一個樹型的目錄服務,支援變更推送,適合作為 Dubbo 服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用 。
安裝Zookeeper
下載地址:http://archive.apache.org/dist/zookeeper/
安裝步驟:
第一步:安裝 jdk(略)
第二步:把 zookeeper 的壓縮包(zookeeper-3.4.6.tar.gz)上傳到 linux 系統
第三步:解壓縮壓縮包
tar -zxvf zookeeper-3.4.6.tar.gz
第四步:進入zookeeper-3.4.6目錄,建立data目錄
mkdir data
第五步:進入conf目錄 ,把zoo_sample.cfg 改名為zoo.cfg
cd conf
mv zoo_sample.cfg zoo.cfg
第六步:開啟zoo.cfg檔案, 修改data屬性:dataDir=/root/zookeeper-3.4.6/data
啟動、停止Zookeeper
進入Zookeeper的bin目錄,啟動服務命令
./zkServer.sh start
停止服務命令
./zkServer.sh stop
檢視服務狀態:
./zkServer.sh status
Dubbo快速入門
Dubbo作為一個RPC框架,其最核心的功能就是要實現跨網路的遠端呼叫。本小節就是要建立兩個應用,一個作為服務的提供方,一個作為服務的消費方。通過Dubbo來實現服務消費方遠端呼叫服務提供方的方法。
服務提供方開發
開發步驟:
(1)建立maven工程(打包方式為war)dubbodemo_provider,在pom.xml檔案中匯入如下座標
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>5.0.5.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!-- dubbo相關 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.7</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.12.1.GA</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!-- 指定埠 --> <port>8081</port> <!-- 請求路徑 --> <path>/</path> </configuration> </plugin> </plugins> </build>
(2)配置web.xml檔案
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
(3)建立服務介面
package cn.blogsx.service;
public interface HelloService {
public String sayHello(String name);
}
(4)建立服務實現類
packagecn.blogsx.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import cn.blogsx.service.HelloService;
@Service
public class HelloServiceImpl implements HelloService {
public String sayHello(String name) {
return "hello " + name;
}
}
注意:服務實現類上使用的Service註解是Dubbo提供的,用於對外發布服務
(5)在src/main/resources下建立applicationContext-service.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 當前應用名稱,用於註冊中心計算應用間依賴關係,注意:消費者和提供者應用名不要一樣 -->
<dubbo:application name="dubbodemo_provider" />
<!-- 連線服務註冊中心zookeeper ip為zookeeper所在伺服器的ip地址-->
<dubbo:registry address="zookeeper://192.168.134.129:2181"/>
<!-- 註冊 協議和port 埠預設是20880 -->
<dubbo:protocol name="dubbo" port="20881" />
<!-- 掃描指定包,加入@Service註解的類會被髮布為服務 -->
<dubbo:annotation package="cn.blogsx.service.impl" />
</beans>
(6)啟動服務
tomcat7:run
服務消費方開發
開發步驟:
(1)建立maven工程(打包方式為war)dubbodemo_consumer,pom.xml配置和上面服務提供者相同,只需要將Tomcat外掛的埠號改為8082即可
(2)配置web.xml檔案
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定載入的配置檔案 ,通過引數contextConfigLocation載入 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-web.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
(3)將服務提供者工程中的HelloService介面複製到當前工程
(4)編寫Controller
package cn.blogsx.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import cn.blogsx.service.HelloService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/demo")
public class HelloController {
@Reference
private HelloService helloService;
@RequestMapping("/hello")
@ResponseBody
public String getName(String name){
//遠端呼叫
String result = helloService.sayHello(name);
System.out.println(result);
return result;
}
}
注意:Controller中注入HelloService使用的是Dubbo提供的@Reference註解
(5)在src/main/resources下建立applicationContext-web.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 當前應用名稱,用於註冊中心計算應用間依賴關係,注意:消費者和提供者應用名不要一樣 -->
<dubbo:application name="dubbodemo-consumer" />
<!-- 連線服務註冊中心zookeeper ip為zookeeper所在伺服器的ip地址-->
<dubbo:registry address="zookeeper://192.168.134.129:2181"/>
<!-- 掃描的方式暴露介面 -->
<dubbo:annotation package="cn.blogsx.controller" />
</beans>
(6)執行測試
tomcat7:run啟動
在瀏覽器輸入http://localhost:8082/demo/hello.do?name=Jack,檢視瀏覽器輸出結果
Dubbo管理控制檯
我們在開發時,需要知道Zookeeper註冊中心都註冊了哪些服務,有哪些消費者來消費這些服務。我們可以通過部署一個管理中心來實現。其實管理中心就是一個web應用,部署到tomcat即可。
安裝
安裝步驟:
(1)將資料中的dubbo-admin-2.6.0.war檔案複製到tomcat的webapps目錄下
(2)啟動tomcat,此war檔案會自動解壓
(3)修改WEB-INF下的dubbo.properties檔案,注意dubbo.registry.address對應的值需要對應當前使用的Zookeeper的ip地址和埠號
dubbo.registry.address=zookeeper://192.168.134.129:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
(4)重啟tomcat
使用
操作步驟:
(1)訪問http://localhost:8080/dubbo-admin-2.6.0/,輸入使用者名稱(root)和密碼(root)