(一)定義公共服務接口模塊
本次實例演示接口調用,消費者調用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可視化工具,是否有對應目錄生成