dubbo(一)dubbo+zookeeper 之 Hello World

以前2個項目交互,一直用的httpclient,繁瑣的很. 用dubbo來做RPC確實好太多啦. 先把這個demo記錄下來.

操作步驟:

1.安裝zookeeper,下載dubbo-admin的war包.

2.寫代碼. 分爲 接口,提供者,消費者 3個模塊

3.測試+後臺管理查看


源碼地址:

https://code.csdn.net/qq315737546/dt1-api/tree/master

https://code.csdn.net/qq315737546/dt1-provider/tree/master

https://code.csdn.net/qq315737546/dt1-consumer/tree/master


1.安裝zookeeper,下載dubbo-admin的war包.

1) zookeeper下載地址http://www.apache.org/dyn/closer.cgi/zookeeper/, 最新版已經是3.5.2了, 我下載的3.4.8

下載完成後,解壓,然後找到配置文件  D:\zookeeper-3.4.8\conf\zoo_sample.cfg ,將文件改名爲zoo.cfg, 把裏面的dataDir地址也改一下. dataDir=D:/zookeeper-3.4.8/tmp

啓動zookeeper.

d:
cd zookeeper-3.4.8\bin
zkServer.cmd



如果不報錯,則說明安裝成功. 可以看到上面默認讀取了 zoo.cfg文件.


2) 下載 dubbo-admin.war

dubbo官網上的下載鏈接都不能用,只好去網上下載了. 我也上傳了一份到CSDN.http://download.csdn.net/detail/qq315737546/9584233

下載後,找到 tomcat的\webapps\ROOT 目錄, 將下面內容刪除,然後換上這個war包就可以了.

啓動tomcat,訪問 http://localhost:8080 , 會讓輸入用戶名密碼. 在 WEB-INF\dubbo.properties 裏面有 root和guest 2個用戶,密碼默認和用戶名一樣.



2.寫代碼. 分爲 接口,提供者,消費者 3個模塊

dubbo提供者需要 向外發佈接口, 消費者需要調用接口, 所以這2個模塊都需要引用接口, 這時候將接口單獨出來維護, 供提供者和消費者使用.

我們來建立3個項目.分別是 

dt1-api
dt1-provider
dt1-consumer


1) 首先建立接口項目, dt1-api

這個項目最後會當做jar被使用,所以在pom.xml中配置爲jar

	<modelVersion>4.0.0</modelVersion>
	<groupId>com.dingcheng</groupId>
	<artifactId>dt1-api</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>dt1-api</name>



這個項目很簡單,只有一個interface

package com.dingcheng.user.service;

public interface UserService {
	public String hello(String name);
	public String test(String name);
}


2)建立提供者項目, dt1-provider

首先pom.xml中需要引入 api.jar 以及 dubbo的jar

  	<modelVersion>4.0.0</modelVersion>
	<groupId>com.dingcheng</groupId>
	<artifactId>dt1-provider</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>dt-consumer Maven Webapp</name>
	<url>http://maven.apache.org</url>

		<dependency>
			<groupId>com.dingcheng</groupId>
			<artifactId>dt1-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.8</version>
		</dependency>

		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>

這裏注意引入dubbo的時候,需要把它自帶的spring包給過濾掉,因爲自帶的版本太低,會有衝突.


然後實現剛纔api裏面的接口.

package com.dingcheng.user.service.impl;

import org.springframework.stereotype.Service;

import com.dingcheng.user.service.UserService;

@Service("userService")
public class UserServiceImpl implements UserService{
	@Override
	public String hello(String name){
		return "hello :"+name;
	}

	@Override
	public String test(String name) {
		return "test :"+name;
	}
}


然後就開始配置dubbo.xml, 向外提供服務.

	<!-- 提供方應用信息,用於計算依賴關係, 名稱隨便就可以 -->
	<dubbo:application name="dt1_provider" />

	<!-- 使用zookeeper註冊中心暴露服務地址 -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181" />

	<!-- 用dubbo協議在20880端口暴露服務 -->
	<dubbo:protocol name="dubbo" port="20880" />

	<!-- 聲明需要暴露的服務接口 -->
	<dubbo:service interface="com.dingcheng.user.service.UserService" ref="userService" />	


說明:

  dubbo:registry 標籤一些屬性的說明:

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

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

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

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

     5address可以Zookeeper集羣配置,地址可以多個以逗號隔開等。

  dubbo:service標籤的一些屬性說明:

    1interface服務接口的路徑

     2ref引用對應的實現類的BeanID

     3registry向指定註冊中心註冊,在多個註冊中心時使用,值爲<dubbo:registry>id屬性,多個註冊中心ID用逗號分隔,如果不想將該服務註冊到任何registry,可將值設爲N/A

     4register 默認true ,該協議的服務是否註冊到註冊中心。


至此,提供者已經可以了. 我們放在tomcat下運行. 然後去登錄管理後臺,可以看到如下圖所示.



3)建立提供者項目, dt1-consumer

首先 pom.xml中需要引入 api.jar 以及 dubbo的jar. 可dt1-provider一樣.

然後 我們寫個action,消費者,用來調用剛纔的服務


package com.dingcheng.user.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dingcheng.user.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
	@Autowired
	private UserService userService;

	@RequestMapping("/hello.action")
	@ResponseBody
	public Map<String, Object> hello(String name) {
		String result = userService.hello(name);
		Map<String, Object> hm = new HashMap<String, Object>();
		hm.put("name", result);
		return hm;
	}
	
	@RequestMapping("/test.action")
	@ResponseBody
	public Map<String, Object> tet(String name) {
		String result = userService.test(name);
		Map<String, Object> hm = new HashMap<String, Object>();
		hm.put("name", result);
		return hm;
	}

}


然後就配置dubbo.xml, 指定提供者

	<!-- 提供方應用信息,用於計算依賴關係,名稱無所謂 -->
	<dubbo:application name="dt1_constumer" />

	<!-- 使用zookeeper註冊中心暴露服務地址 -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181" />

	 <!-- 生成遠程服務代理,可以和本地bean一樣使用demoService -->
    <dubbo:reference id="userService" interface="com.dingcheng.user.service.UserService" check="false"/>

說明:

   dubbo:reference 的一些屬性的說明:

     1interface調用的服務接口

     2check 啓動時檢查提供者是否存在,true報錯,false忽略

     3registry 從指定註冊中心註冊獲取服務列表,在多個註冊中心時使用,值爲<dubbo:registry>id屬性,多個註冊中心ID用逗號分隔

     4loadbalance 負載均衡策略,可選值:random,roundrobin,leastactive,分別表示:隨機,輪循,最少活躍調用



至此,消費者已經可以了. 我們放在tomcat下運行. 然後去登錄管理後臺,可以看到如下圖所示.




3.測試+後臺管理查看

訪問http://localhost:8110/dt1-consumer/user/hello.action?name=123456 (我改了端口號)

後臺管理在步驟2中已經看到了不少,剩下的功能就慢慢摸索吧.



源碼地址:

https://code.csdn.net/qq315737546/dt1-api/tree/master

https://code.csdn.net/qq315737546/dt1-provider/tree/master

https://code.csdn.net/qq315737546/dt1-consumer/tree/master


發佈了41 篇原創文章 · 獲贊 44 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章