Dubbo基礎實例

(一)定義公共服務接口模塊

本次實例演示接口調用,消費者調用getUser(int id)方法獲取遠程服務數據創建公共接口項目dubbo-common-interface,創建實體類和接口,對外暴露

創建實體類,序列化

public class User implements Serializable {

	private static final long serialVersionUID = 1L;

	private int id;
	// 姓名
	private String name;
	// 年齡
	private int age;

  /**省略setter和getter**/

}

創建接口

public interface UserService {

	// 根據用戶id,查詢用戶信息
	User getUser(int id);
}
(二)服務接口提供模塊

創建接口服務項目dubbo-provider,pom.xml需要引入dubbo-common-interface依賴,以使用對應的接口和實體類對象,還需要引入zookeeper依賴 ,dubbo依賴
POM.XML參考如下:

<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>com.zhizuobiao.dubbo</groupId>
	<artifactId>dubbo-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<dependencies>
		<!-- 添加公共接口依賴 -->
		<dependency>
			<groupId>dubbo</groupId>
			<artifactId>dubbo-common-interface</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<!-- dubbo依賴 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
		</dependency>
		<!-- zookeeper依賴 -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
	</dependencies>
</project>

創建配置文件,配置如下dubbo-user-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://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	
	<!-- 服務提供者配置 -->
	<!-- 服務提供者應用名稱 -->
	<dubbo:application name="user-provider" />
	<!-- 註冊中心地址 -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181" />
	<!-- 協議和端口 -->
	<dubbo:protocol name="dubbo" port="20880" />
	<!-- 指明提供服務的接口 -->
	<dubbo:service interface="services.UserService"
		ref="userService" />
	<!-- 服務實現類  -->
	<bean id="userService" class="services.UserServiceImpl" />
</beans>

解釋:
服務提供者應用名稱:微服務相互調用和註冊中心發現服務的唯一白鷗是
註冊中心地址:使用zookeeper作爲註冊中心,這裏在Windows本地測試,所以是127.0.0.1
不管是在Linux還是Windows其實配置都是一樣,注意修改
協議和端口:協議和當前服務提供者暴露給註冊中心和消費者的端口
指明提供服務的接口:接口調用與下面的服務實現類配合,消費調用接口,由服務實現類處理業務

創建接口實現類,對應配置文件中[服務實現類]

public class UserServiceImpl implements UserService {
    //模擬業務處理
	public User getUser(int id) {
		User user = new User();
		user.setAge(30);
		user.setId(id);
		user.setName("Dubbo");
		return user;
	}
}
(三)服務消費者模塊

創建服務消費者項目dubbo-consumer
POM.XML文件如下:

<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>com.zhizuobiao.dubbo</groupId>
	<artifactId>dubbo-consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>


	<dependencies>
		<!-- 添加公共接口依賴 -->
		<dependency>
			<groupId>dubbo</groupId>
			<artifactId>dubbo-common-interface</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

		<!-- dubbo依賴 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
		</dependency>

		<!-- zookeeper依賴 -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
	</dependencies>
	
</project>

配置文件

<?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://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

	<!-- 消費者配置 -->
	<!-- 消費者應用名 -->
	<dubbo:application name="demo-consumer" />	
	<!-- 註冊中心地址 -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181" />
	<!-- 遠程服務代理 -->
	<dubbo:reference id="userService"
		interface="services.UserService" />

</beans>
(四)測試

由於註冊中心使用了zookeeper,因此需要開啓zookeeper服務,這裏爲了簡便使用的是Windows下開啓的zookeeper.爲了可視化觀察服務提供和消費,請開啓ZooInspector工具
1:進入Zookeeper下面的bin目錄點擊zkServer.cmd,啓動服務
2:進入ZooInspector/build, 當前目錄打開CMD,輸入命令如下,啓動jar

java -jar zookeeper-dev-ZooInspector.jar //執行成功後,會彈出java ui client

3:在服務提供者項目創建測試類,開啓服務

import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 運行服務提供者
 */
public class ProviderMain {
	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "dubbo-user-provider.xml" });
		// 加載
		context.start();
		System.out.println("服務發佈成功 端口 20880");
		// 讓程序阻塞
		System.in.read();
	}
}

備註:使用System.in.read();讓程序阻塞目的在於保證服務提供者能夠一直保持啓動狀態

4:在消費者項目下創建測試類,啓動服務

import org.springframework.context.support.ClassPathXmlApplicationContext;
import services.User;
import services.UserService;
import java.io.IOException;
/**
 * 消費者
 */
public class ConsumerMain {

    public static void main(String[] args) throws IOException {
        // 消費者調用服務提供者
        // 獲取返回數據

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{"dubbo-user-consumer.xml"});
        // 加載
        context.start();
        // 獲取 遠程服務代理對象
        UserService userService = (UserService) context.getBean("userService");
        // 調用方法
        User user = userService.getUser(1);
        // 打印結果
        System.out.println(user.getName());
        // 讓程序阻塞
        System.in.read();
    }
}

5:觀察控制檯輸出是否能夠收到服務提供者消息,觀察Zookeeper可視化工具,是否有對應目錄生成

在這裏插入圖片描述

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