安装zookeeper注册中心
- zookeeper的安装不再详述。
- zookeeper的作用有配置管理、名字服务、分布式锁、集群管理。
搭建项目骨架
熟悉dubbo架构的朋友,一定知道dubbo主要由注册中心registry、服务提供者provider,服务消费者consumer组成,并且服务提供者provider和服务消费者consumer分别与注册中心registry通过维持一个长连接进行通信。下面通过一个简单的项目完成服务的提供和消费示例。
1 我们创建几个简单的目录方便说明
项目目录.png
- SDK子模块是二方包,将来提供给别的系统(一般是消费者,比如说Consumer)使用,作用是定义提供方和消费方协商好的通信规范(接口)。一般的数据转换模型DTO以及接口实际返回的错误码也会定义在这里面。
- Provider子模块是服务的提供者,主要是实现SDK模块中定义的接口,所以基本上是由实现类组成。
- Consumer子模块是服务的消费者,主要是消费Provider模块提供的服务。服务的调用只需要关心接口的定义(SDK),而不需要关心服务是如何实现的(Provider)。
- Provider和Consumer一般是分开部署(不会部署在同一台机器上)。依赖关系上讲,Provider需要实现SDK中的接口,Consumer需要消费Provider提供的服务,所以Provider和Consumer都需要依赖SDK。
2 服务接口的定义
api目录.png我们在SDK模块中定义了一个接口,只有一个方法。
package com.test;
public interface UserService {
String sayHello(String name);
}
3 服务提供者实现服务
provider目录.pnga. 有了dubbo这款优秀的rpc框架,我们只需要定义一个实现类实现SDK中定义的接口,再做一个简单的dubbo配置(利用了spring)后,将代码部署到机器上去,这样别人就能远程调用我们提供的服务了。这在分布式系统中十分便捷,底层的通信细节框架都帮我们做好了,无需关心。
b. Provider的配置文件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">
<dubbo:application name="demo-provider"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.test.UserService" ref="userService"/>
<bean id="userService" class="com.test.UserServiceImpl"/>
</beans>
4 消费者消费服务
consumer目录.pnga. 消费者要消费服务也很简单
package org.Consumer;
import com.test.UserService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestConsumer {
public static void main(String[] args) {
String file = "classpath:dubbo-consumer.xml";
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(file);
System.out.println("begin");
UserService userService = (UserService)context.getBean("userService");
System.out.println(userService.sayHello("lisi"));
}
}
b. 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="consumer"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:reference id="userService" interface="com.test.UserService" />
</beans>
项目需要添加的dependency
- 无论是dubbo-provider.xml还是dubbo-consumer.xml都需要配置dubbo选项,所以需要依赖dubbo类库中的定义schema的xml文件。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.2</version>
</dependency>
- Provider和Consumer都需要与注册中心zookeeper维持一个长连接,所以他们都需要依赖zkclient。
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
- 如果想看到dubbo内部运行日志的话,还需要加入日志的依赖。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
网友评论