美文网首页
本地搭建dubbo服务环境

本地搭建dubbo服务环境

作者: tristate | 来源:发表于2018-05-13 16:01 被阅读0次

安装zookeeper注册中心

  1. zookeeper的安装不再详述。
  2. zookeeper的作用有配置管理、名字服务、分布式锁、集群管理。

搭建项目骨架

熟悉dubbo架构的朋友,一定知道dubbo主要由注册中心registry、服务提供者provider,服务消费者consumer组成,并且服务提供者provider和服务消费者consumer分别与注册中心registry通过维持一个长连接进行通信。下面通过一个简单的项目完成服务的提供和消费示例。

1 我们创建几个简单的目录方便说明

项目目录.png
  1. SDK子模块是二方包,将来提供给别的系统(一般是消费者,比如说Consumer)使用,作用是定义提供方和消费方协商好的通信规范(接口)。一般的数据转换模型DTO以及接口实际返回的错误码也会定义在这里面。
  2. Provider子模块是服务的提供者,主要是实现SDK模块中定义的接口,所以基本上是由实现类组成。
  3. Consumer子模块是服务的消费者,主要是消费Provider模块提供的服务。服务的调用只需要关心接口的定义(SDK),而不需要关心服务是如何实现的(Provider)。
  4. 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目录.png

a. 有了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目录.png

a. 消费者要消费服务也很简单

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

  1. 无论是dubbo-provider.xml还是dubbo-consumer.xml都需要配置dubbo选项,所以需要依赖dubbo类库中的定义schema的xml文件。
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.2</version>
</dependency>
  1. Provider和Consumer都需要与注册中心zookeeper维持一个长连接,所以他们都需要依赖zkclient。
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
  1. 如果想看到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>

相关文章

网友评论

      本文标题:本地搭建dubbo服务环境

      本文链接:https://www.haomeiwen.com/subject/nxsldftx.html