Dubbo入门(二)Provider的搭建

前言

      本章讲解Dubbo架构中一个重要角色Provider的代码搭建

方法

1.准备工作

1)安装zookeeper

下载zookeeper,这个之前是有讲过的。

Dubbo入门(二)Provider的搭建

解压缩至  /usr/local/下。重命名为zookeeper

Dubbo入门(二)Provider的搭建

在zk根路径下创建data文件夹 

进入zk配置文件目录,复制一份zoo_sample.cfg命名为zoo.cfg作为配置文件:

Dubbo入门(二)Provider的搭建

修改 zoo.cfg中的数据存储路径:

Dubbo入门(二)Provider的搭建

启动zk并查看状态:启动成功则代表单机版的zk安装启动成功!

Dubbo入门(二)Provider的搭建 

2.编写接口项目

为了更好的实现RPC,我们需要将service层的接口与实现类分为两个项目进行编写。

首先编写接口项目,创建maven项目dubbo-service:

我们只需要编写一个示例接口就可以了。

Dubbo入门(二)Provider的搭建

3.编写接口实现类项目

1)引入接口项目的依赖

Dubbo入门(二)Provider的搭建

2)编写接口的实现类方法

Dubbo入门(二)Provider的搭建

3)引入dubbo相关jar

由于curator框架中带有的zookeeper的jar包与我的zk-3.4.9不兼容,所以排除之!

Dubbo入门(二)Provider的搭建

4)编写dubbo配置文件

由于dubbo依赖于spring,所以其配置文件类似于spring的配置文件。

我们将配置文件命名为applicationContext-dubbo.xml,放入如下目录中(默认目录):

Dubbo入门(二)Provider的搭建

 内容编写如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <!-- provider的名字 -->
    <dubbo:application name="demo-provider"/>
    <!-- dubbo所使用的注册中心 protocol表示是什么注册中心,address代表注册中心ip+端口号 -->
    <dubbo:registry address="192.168.1.106:2181" protocol="zookeeper"/>
    <!-- dubbo使用的传输协议以及提供服务的端口号 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 对外提供的service接口实现类 -->
    <bean id="demoService" class="cn.edu.ccut.DemoServiceImpl"/>
    <!-- dubbo对外提供的service服务层接口 -->
    <dubbo:service interface="cn.edu.ccut.DemoService" ref="demoService"/>
</beans>

要点:

1、Dubbo所使用的注册中心

dubbo可以使用如下四种注册中心进行服务注册,其中Zookeeper注册中心为官方所推荐。

Dubbo入门(二)Provider的搭建

Feature Maturity Strength Problem Advise User
Zookeeper注册中心 Stable 支持基于网络的集群方式,有广泛周边开源产品,建议使用dubbo-2.3.3以上版本(推荐使用) 依赖于Zookeeper的稳定性 可用于生产环境  
Redis注册中心 Stable 支持基于客户端双写的集群方式,性能高 要求服务器时间同步,用于检查心跳过期脏数据 可用于生产环境  
Multicast注册中心 Tested 去中心化,不需要安装注册中心 依赖于网络拓扑和路由,跨机房有风险 小规模应用或开发测试环境  
Simple注册中心 Tested Dogfooding,注册中心本身也是一个标准的RPC服务 没有集群支持,可能单点故障 试用

2、Dubbo所使用的传输协议

dubbo可以使用如下多种协议进行服务的提供,其中dubbo协议为官方推荐。

Dubbo入门(二)Provider的搭建

 

Feature Maturity Strength Problem Advise User
Dubbo协议 Stable 采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用) 在大文件传输时,单一连接会成为瓶颈 可用于生产环境 Alibaba
Rmi协议 Stable 可与原生RMI互操作,基于TCP协议 偶尔会连接失败,需重建Stub 可用于生产环境 Alibaba
Hessian协议 Stable 可与原生Hessian互操作,基于HTTP协议 需hessian.jar支持,http短连接的开销大 可用于生产环境

 

4.编写测试代码,启动我们的容器

 测试代码编写如下:

package cn.edu.ccut;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/applicationContext-dubbo.xml"});
        context.start();
        System.out.println("Provider started.");
        System.in.read();
	}

}

启动效果如下:

Dubbo入门(二)Provider的搭建