Dubbo之旅--Provider示例

       在本篇文章中我们将通过集体的示例来对Dubbo的提供和消费进行代码层面的认识.这里所介绍的是基本的提供者和消费者通过Spring容器来进行相关的提供和消费的服务.首先看整个示例的项目结构如下:

 

计算机生成了可选文字:dubbo-demo dubbo-demo-consumer d ubbo-d d er

 

      我们通过Maven的方式来进行示例,其中dubbo-demo-api为提供者所定义的接口,项目结构如下:

Dubbo之旅--Provider示例_第1张图片

 

此项目里的内容很简单,为服务的一个接口DemoService:

/dubbo-demo/dubbo-demo-api/src/main/java/org/pactera/dubbo/DemoService.java

 

 

packageorg.pactera.dubbo;

 

/**

 *

 * @author Qing

 *

 */

publicinterface DemoService {

 

    public String sayHello(String str);

 

}

 

      Dubbo-demo-provider为服务提供者的示例项目,结构如下图:

 

Dubbo之旅--Provider示例_第2张图片

 

 

Dubbo-demo-consumer为服务消费者的示例项目,结构如下图:

 

 

 

Dubbo之旅--Provider示例_第3张图片

 

 

以上是整个示例程序的整体框架.

接下来我们将从提供者的项目入手开始.在提供者的项目里先要对相关提供的服务进行配置.

 

 

1   Dubbo-demo-provider的项目里我们需要用到Dubbo,Zookeeper,以及dubbo-demo-api的相关java,因此需要在pom.xml对其进行引用,如下:

 

   

       

           org.pactera.dubbo

           dubbo-demo-api

           1.0-SNAPSHOT

       

       

           com.alibaba

           dubbo

           2.4.10

       

       

           com.101tec

           zkclient

            0.3

       

       

           junit

           junit

           3.8.1

            test

       

   

 

 

2  接下来为了能够让Dubbo的提供者通过Spring方式加载,我们需要对其进行相关配置,如下文件内容.

 

/dubbo-demo/dubbo-demo-provider/src/main/resources/dubbo-demo-provider.xml

 

   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

        ">

   

   

   

 

    

   

   

   

   

   

   

   

   

   

 

 

3  需要将dubbo提供的服务接口进行实现.

 

/dubbo-demo/dubbo-demo-provider/src/main/java/org/pactera/dubbo/provider/DemoServiceImpl.java

 

 

 

packageorg.pactera.dubbo.provider;

 

importcom.alibaba.dubbo.rpc.RpcContext;

importlombok.extern.slf4j.Slf4j;

importorg.pactera.dubbo.DemoService;

 

@Slf4j

publicclass DemoServiceImpl implements DemoService {

    public String sayHello(String str) {

      System.out.println("reqInfo: "+ str + ", request form consumer: " +RpcContext.getContext().getRemoteHost());

        return "Hello " + str;

    }

}

 

 

接下来我们需要再写一个提供者启动服务的程序,主要是用来启动Spring容器,并注入相关的服务,同时将提供者的内容注册到Zookeeper.

 

 启动程序如下:

/dubbo-demo/dubbo-demo-provider/src/main/java/org/pactera/dubbo/Bootstrap.java

 

packageorg.pactera.dubbo;

 

importcom.google.common.util.concurrent.AbstractIdleService;

importlombok.extern.slf4j.Slf4j;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

 

@Slf4j

publicclass Bootstrap extends AbstractIdleService {

 

    private ClassPathXmlApplicationContextcontext;

 

    public static void main(String[] args) {

        Bootstrap bootstrap = new Bootstrap();

        bootstrap.startAsync();

        try {

            Object lock = new Object();

            synchronized (lock) {

                while (true) {

                    lock.wait();

                }

            }

        } catch (InterruptedException ex) {

            System.err.println("ignoreinterruption");

        }

    }

 

    /**

     * Start the service.

     */

    @Override

    protected void startUp() throws Exception {

        context = newClassPathXmlApplicationContext("dubbo-demo-provider.xml");

        context.start();

        context.registerShutdownHook();

       System.out.println("----------------provider service startedsuccessfully------------");

    }

 

    /**

     * Stop the service.

     */

    @Override

    protected void shutDown() throws Exception{

        context.stop();

       System.out.println("-------------service stoppedsuccessfully-------------");

    }

}

 

 

       5    提供者服务启动日志:

 

Dubbo之旅--Provider示例_第4张图片

 

         至此,服务者Provider的示例基本上已经结束,如果读者配置监控中心的话,可以打开监控中心搜索demoService,你便可以在监控中心看到此提供者服务的具体信息.限于篇幅的原因,关于消费者的相关示例将在接下来的文章进行阐述.

你可能感兴趣的:(架构设计,Dubbo之旅)