一、安裝zookeeper,集羣模式配置
自行百度,下載解壓
(由於機器有限,本文使用一臺機器不同端口來模擬實現集羣模式)
1、創建zookeepere文件夾
2、zookeeper文件夾下新建server1、server2、server3三個文件夾
3、複製解壓後的zookeeper文件夾到server1、server2、server3這三個文件夾下
4、再分別在這三個文件夾下創建data、dataLog兩個目錄
完成後如下圖
進入zookeeper-3.4.14/conf文件夾,重命名zoo-sample.cfg爲zoo.cfg,並修改配置如下:
# 心跳檢測時間間隔,單位ms
tickTime = 2000
#zookeeper集羣中包含多臺server,其中一臺爲leader,其餘爲follower,initLimit參數配置初始化連接時,follower和leader之間的最長心跳時間,設置爲5,則表示時間限制爲5倍tickTime
initLimit = 5
#syncLimit配置leader和follower之間發送消息、請求和應答的最大時間長度,設置爲2,則說明時間限制爲2倍tickTime
syncLimit = 2
dataDir=/Library/zookeeper/server1/data
dataLogDir=/Library/zookeeper/server1/dataLog
clientPort=2181
server.1 = 127.0.0.1:2222:2225
server.2 = 127.0.0.1:3333:3335
server.3 = 127.0.0.1:4444:4445
其中dataDir爲data文件夾所在的位置, dataLogDir爲dataLog文件夾所在的位置
server1裏的clientPort=2181, server2裏的clientPort=2182, server3裏的clientPort=2183
在data文件夾裏新增myid文件,文件內容爲serverID, 如server1的myid文件的內容爲1,server2的myid文件內容爲2,以此類推
終端進入zookeeper3.4.14/bin目錄下,執行./zkServer.sh start啓動zookeeper服務,執行./zkServer.sh status查看服務狀態,當狀態爲一個leader, 2個follower時,則啓動成功
二、Dubbo服務生產者
項目結構如下
dubbotestapi項目下創建User對象
public class User implements Serializable{
private static final long serialVersionUID = 5264854701181085862L;
private Long id;
private String username;
private String password;
private Integer age;
public static long getSerialVersionUID() {
return serialVersionUID;
}
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;
}
}
創建userAPI接口
public interface UserAPI {
public List<User> getUsers();
String sayHello(String name);
}
將dubbotestapi打包生成jar引入dubbotestservice項目,並引入其他依賴的jar包
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.34.Final</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.6</version>
<exclusions>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
<exclusions>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
<exclusions>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
配置dubbo-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">
<bean id="userService" class="com.qjj.service.UserAPIImpl"/>
<dubbo:application name="dubbo-provider"/>
<dubbo:registry protocol="zookeeper" address="127.0.0.1:1281,127.0.0.1:2182,127.0.0.1:2183" client="zkclient"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.qjj.api.UserAPI" ref="userService"/>
</beans>
添加userAPI接口的實現類userAPIImpl文件
public class UserAPIImpl implements UserAPI{
public List<User> getUsers() {
List<User> list = new ArrayList<User>();
for (int i=0;i<10;i++){
User user = new User();
user.setUsername("username_" + i);
user.setId(Long.valueOf(i+1));
user.setAge(10 + i);
user.setPassword("123456");
list.add(user);
}
return list;
}
public String sayHello(String name) {
return "11111";
}
三、Dubbo服務消費者
引入依賴的jar包
<dependency>
<groupId>com.qjj</groupId>
<artifactId>dubbotest.api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.34.Final</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.6</version>
<exclusions>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
<exclusions>
<exclusion>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
</exclusion>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
<exclusions>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
</exclusions>
</dependency>
創建dubbo-consumer.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="dubbo-consumer" />
<!-- 使用zookeeper註冊中心暴露服務地址 -->
<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" client="zkclient"/>
<!-- 生成遠程服務代理,可以像使用本地bean一樣使用demoService -->
<dubbo:reference id="userService" interface="com.qjj.api.UserAPI" />
</beans>
創建測試類
public class consumer {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "dubbo-consumer.xml" });
context.start();
UserAPI userAPI = context.getBean(UserAPI.class);
String hello = userAPI.sayHello("qijiaojiao");
System.out.println(hello);
List list = userAPI.getUsers();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
}
運行測試類,執行結果如下: