目录
一、Dubbo入门示例(二)
本章演示 Dubbo+Zookeeper demo
dubbo 版本 2.6.2
zookeeper 版本 3.4.10
curator-recipes 版本 4.0.0
二、zookeeper安装
zookeeper单机安装步骤
1. 安装 java环境
yum -y install java-1.8.0-openjdk*
2. 安装 zookeeper
网址 http://mirror.bit.edu.cn/apache/zookeeper/
2.1 安装步骤
1. linux 安装目录 /usr/local/zookeeper
mkdir -p /usr/local/zookeeper
cd /usr/local/zookeeper
2. 上传压缩包至/usr/local/zookeeper 并解压
/usr/local/zookeeper/zookeeper-3.4.10.tar.gz
tar -zxvf zookeeper-3.4.10.tar.gz
3. 复制配置文件
cd zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
4. 修改配置文件:默认配置即可启动,端口 2181
vim zoo.cfg
参数 | 意义 |
tickTime | 2000 |
syncLimit | Leader 和 follower 之间的通讯时长最长不能超过 initLimt*ticktime |
initLimt | 接受客户端链接 zk 初始化的最长等待心跳时长 initLimt*ticktime |
dataDir | 数据目录 |
dataLogDir | 日志文件 |
clientPort | 客户端链接服务端端口号 |
Server.A=B:C:D | A 第几号服务器 B 服务 IP C 代表 Leader 和 follower 通 讯端口 D 备用选 leader 端口 |
5. 启动
cd /usr/local/zookeeper/zookeeper-3.4.10/bin
// 启动
sh zkServer.sh start
// 停止
sh zkServer.sh stop
6. 验证
jps
25264 Jps
25247 QuorumPeerMain
sh zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: standalone // 单机模式
7. 链接
输入 ls / 查看节点
quit 退出
cd /usr/local/zookeeper/zookeeper-3.4.10/bin
sh zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
三、dubbo项目配置
1. Maven 项目结构
- dubbo-common 公共组件
- dubbo-client 客户端
- dubbo-server 服务端
1.1 dubbo-common
项目结构
pom文件
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
com.core.common.entity.Order
import java.io.Serializable;
public class Order implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String orderNo;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
@Override
public String toString() {
return "Order [id=" + id + ", orderNo=" + orderNo + "]";
}
}
com.core.common.entity.User
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
com.core.common.service.OrderService
import com.core.common.entity.Order;
public interface OrderService {
public Order getOrder(Integer id);
}
com.core.common.service.UserService
import com.core.common.entity.User;
public interface UserService {
public User getUser();
public User getUser(Integer id);
}
1.2 dubbo-server
项目结构
pom
<dependency>
<groupId>com.core</groupId>
<artifactId>dubbo-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
com.core.service.OrderServiceImpl
import java.util.UUID;
import com.core.common.entity.Order;
import com.core.common.service.OrderService;
public class OrderServiceImpl implements OrderService{
@Override
public Order getOrder(Integer id) {
Order order = new Order();
order.setId(id);
order.setOrderNo(UUID.randomUUID().toString().replaceAll("-", "")+id);
return order;
}
}
com.core.service.UserServiceImpl
import com.core.common.entity.User;
import com.core.common.service.UserService;
public class UserServiceImpl implements UserService{
@Override
public User getUser() {
User user = new User();
user.setId(1);
user.setName("zhangsan");
return user;
}
@Override
public User getUser(Integer id) {
User user = new User();
user.setId(id);
user.setName("zhangsan"+id);
return user;
}
}
com.core.dubbo.SpringServerApplication
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class SpringServerApplication {
public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("/spring-provide.xml");
((ClassPathXmlApplicationContext) context).start();
System.in.read();
}
}
spring-provide.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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="spring-dubbo-server"/>
<!-- 设置注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.149.140:2181"></dubbo:registry>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.core.common.service.UserService" ref="userService" />
<dubbo:service interface="com.core.common.service.OrderService" ref="orderService" />
<!-- 和本地bean一样实现服务 -->
<bean id="userService" class="com.core.service.UserServiceImpl"/>
<!-- 和本地bean一样实现服务 -->
<bean id="orderService" class="com.core.service.OrderServiceImpl"/>
</beans>
1.3 dubbo-client
项目结构
pom
<dependency>
<groupId>com.core</groupId>
<artifactId>dubbo-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
com.core.dubbo.SpringClientApplication
import java.io.IOException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.core.common.entity.Order;
import com.core.common.entity.User;
import com.core.common.service.OrderService;
import com.core.common.service.UserService;
public class SpringClientApplication {
private static int id ;
public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("/spring-consumer.xml");
UserService userService = context.getBean(UserService.class);
OrderService orderService = context.getBean(OrderService.class);
while (!read().equals("exit")) {
User user = userService.getUser(id);
System.out.println(user);
Order order = orderService.getOrder(id);
System.out.println(order);
}
}
private static String read() throws IOException {
byte[] b = new byte[1024];
int size = System.in.read(b);
String trim = new String(b, 0, size).trim();
try {
id = Integer.parseInt(trim);
} catch (Exception e) {}
return trim;
}
}
spring-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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!-- 设置服务名 -->
<dubbo:application name="spring-dubbo-client"/>
<!-- 设置注册中心 -->
<dubbo:registry protocol="zookeeper" address="192.168.149.140:2181"></dubbo:registry>
<!-- 调用端口 -->
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:reference id="userService" interface="com.core.common.service.UserService" />
<dubbo:reference id="orderService" interface="com.core.common.service.OrderService" />
</beans>
1.4 启动
启动提供者 com.core.dubbo.SpringServerApplication
启动消费者 com.core.dubbo.SpringClientApplication
zookeeper 节点变化:增加dubbo节点
[zk: localhost:2181(CONNECTED) 4] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 5] ls /
[dubbo, zookeeper]
[zk: localhost:2181(CONNECTED) 6] ls /dubbo
[com.core.common.service.OrderService, com.core.common.service.UserService]
[zk: localhost:2181(CONNECTED) 7]