dubbo实战之一:准备和初体验

《dubbo实战》系列的父工程

为了方便管理《dubbo实战》系列的代码和依赖库版本的管理,这里创建名为dubbopractice的父maven工程,整个系列的后续源码都会作为它的子工程;

dubbopractice的pom.xml内容如下:

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

   

        practiceinterface

        helloxmldirectprovider

        helloxmldirectconsumer

        springbootzkprovider

        springbootzkconsumer

        springbootmulticastprovider

        springbootmulticastconsumer

   

   

        UTF-8

        1.8

        1.8

        1.8

        2.7.6

        2.3.3.RELEASE

   

    4.0.0

    com.bolingcavalry

    dubbopractice

    1.0-SNAPSHOT

    pom

   

       

           

                org.apache.dubbo

                dubbo-dependencies-bom

                ${dubbo.version}

                pom

                import

           

           

                io.netty

                netty-all

                4.1.25.Final

           

           

           

                org.apache.dubbo

                dubbo

                ${dubbo.version}

           

           

                org.apache.dubbo

                dubbo-dependencies-zookeeper

                ${dubbo.version}

                pom

           

           

                org.apache.dubbo

                dubbo-spring-boot-starter

                ${dubbo.version}

           

           

                org.apache.dubbo

                dubbo-registry-multicast

                ${dubbo.version}

           

           

                org.apache.zookeeper

                zookeeper

                3.4.7

           

           

                com.github.sgroschupf

                zkclient

                0.1

           

           

                org.projectlombok

                lombok

                1.16.16

           

           

                com.fasterxml.jackson.core

                jackson-databind

                2.11.0

                compile

           

           

                com.fasterxml.jackson.datatype

                jackson-datatype-jdk8

                2.11.0

                compile

           

           

                org.slf4j

                slf4j-log4j12

                1.7.25

                compile

           

           

                commons-io

                commons-io

                2.7

                compile

           

           

                org.apache.commons

                commons-lang3

                3.10

                compile

           

           

           

                io.springfox

                springfox-swagger2

                2.5.0

           

           

           

                io.springfox

                springfox-swagger-ui

                2.5.0

           

       

   

《dubbo实战》系列的二方库

涉及到多个工程之间的服务调用,因此要有个工程保存公用的数据结构、接口定义等,因此新建名为practiceinterface的子工程;

practiceinterface工程的pom.xml内容如下,非常简单:

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

   

        dubbopractice

        com.bolingcavalry

        1.0-SNAPSHOT

        ../pom.xml

   

    4.0.0

    com.bolingcavalry

    practiceinterface

    1.0-SNAPSHOT

    practiceinterface

    Beans of all app

此工程目前只有一个接口定义,后面多个子工程都会用到:

package com.bolingcavalry.dubbopractice.service;

public interface DemoService {

    String sayHello(String name);

}

编码(服务提供方)

先创建提供服务的工程helloxmldirectprovider,一共要创建6个文件,创建顺序和功能如下表:

创建顺序 文件名 作用

1 pom.xml 工程的pom文件

2 src/main/java/com/bolingcavalry/helloxmldirectprovider/ProviderApplication.java 启动类

3 src/main/java/com/bolingcavalry/helloxmldirectprovider/service/impl/DemoServiceImpl.java 提供具体的服务

4 src/main/resources/log4j.properties 日志配置文件

5 src/main/resources/dubbo.properties dubbo配置文件

6 src/main/resources/spring/dubbo-provider.xml spring的bean配置

完整的文件位置如下图:

在这里插入图片描述

接下来逐个创建上述内容;

创建名为helloxmldirectprovider的子工程,pom.xml内容如下,可见刚才新建的二方库practiceinterface也被依赖了:

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

   

        dubbopractice

        com.bolingcavalry

        1.0-SNAPSHOT

   

    4.0.0

    com.bolingcavalry

    helloxmldirectprovider

    1.0-SNAPSHOT

   

       

            com.bolingcavalry

            practiceinterface

            ${project.version}

       

       

            org.apache.dubbo

            dubbo

       

       

            org.projectlombok

            lombok

       

       

            org.slf4j

            slf4j-log4j12

       

   

编写启动类ProviderApplication.java,可见就是个普通的后台程序,加载spring配置做初始化:

package com.bolingcavalry.helloxmldirectprovider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProviderApplication {

    public static void main(String[] args) throws Exception {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-provider.xml");

        context.start();

        System.in.read();

    }

}

编写提供具体服务的业务实现类DemoServiceImpl.java,只是个简单的接口实现类而已:

package com.bolingcavalry.helloxmldirectprovider.service.impl;

import com.bolingcavalry.dubbopractice.service.DemoService;

import lombok.extern.slf4j.Slf4j;

import org.apache.dubbo.rpc.RpcContext;

@Slf4j

public class DemoServiceImpl implements DemoService {

    @Override

    public String sayHello(String name) {

        log.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());

        try {

            Thread.sleep(1000);

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

        return "Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();

    }

}

日志配置文件log4j.properties,内容如下:

###set log levels###

log4j.rootLogger=info, stdout

###output to the console###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n

在同样位置创建dubbo配置文件dubbo.properties,内容很简单只有qos的端口设置,用于支持telnet命令:

dubbo.application.qos.port=22222

在resources目录下新建文件夹spring,在此文件夹下创建文件dubbo-provider.xml,要重点关注的是dubbo:registry的配置,其address属性值为multicast://224.5.6.7:1234,代表当前服务通过广播让消费者获得自身信息:

      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">

   

   

   

   

   

至此,服务提供方编码完成,直接在IDEA上运行ProviderApplication类即可启动服务,启动成功后的日志输出如下图:

在这里插入图片描述

编码(服务消费方)

现在网络上已经有了服务,接下来创建一个消费该服务的工程helloxmldirectconsumer,一共要创建5个文件,创建顺序和功能如下表:

创建顺序 文件名 作用

1 pom.xml 工程的pom文件

2 src/main/java/com/bolingcavalry/helloxmldirectconsumer/ConsumerApplication.java 启动、调用远端服务、再结束自身进程

3 src/main/resources/log4j.properties 日志配置文件

4 src/main/resources/dubbo.properties dubbo配置文件

5 src/main/resources/spring/dubbo-consumer.xml spring的bean配置

完整的文件位置如下图:

在这里插入图片描述

接下来逐个创建上述文件;

创建名为helloxmldirectconsumer的子工程,pom.xml内容如下,可见刚才新建的二方库practiceinterface也被依赖了:

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

   

        dubbopractice

        com.bolingcavalry

        1.0-SNAPSHOT

   

    4.0.0

    com.bolingcavalry

    helloxmldirectconsumer

    1.0-SNAPSHOT

   

       

            com.bolingcavalry

            practiceinterface

            ${project.version}

       

       

            org.apache.dubbo

            dubbo

       

       

            org.projectlombok

            lombok

       

       

            org.slf4j

            slf4j-log4j12

       

   

编写唯一的java文件ConsumerApplication.java,里面用了最简单的方法初始化spring环境,然后取得服务实例,执行过方法后结束进程:

package com.bolingcavalry.helloxmldirectconsumer;

import com.bolingcavalry.dubbopractice.service.DemoService;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ConsumerApplication {

    public static void main(String[] args) throws Exception {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-consumer.xml");

        context.start();

        DemoService demoService = context.getBean("demoService", DemoService.class);

        String hello = demoService.sayHello("world1");

        System.out.println("result: " + hello);

    }

}

日志配置文件log4j.properties,内容如下:

###set log levels###

log4j.rootLogger=info, stdout

###output to console###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n

在同样位置创建dubbo配置文件dubbo.properties,内容很简单只有qos的端口设置,用于支持telnet命令,本例中是用不上的,因为远程调用后进程就会结束:

dubbo.application.qos.port=33333

在resources目录下新建文件夹spring,在此文件夹下创建文件dubbo-consumer.xml,要重点关注的是dubbo:registry的配置,其address属性值为multicast://224.5.6.7:1234?unicast=false,代表当前服务通过广播让消费者获得自身信息,unicast=false表示多个消费者都能收到广播:

      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">

   

   

   

上面的dubbo-consumer.xml中还有一处要注意,就是dubbo:reference的timeout属性,这是远程调用的超时时间,此处设置为2秒,要注意的是前面helloxmldirectprovider提供的服务延时了1秒才返回,所以这里设置不能低于1秒;

至此,服务消费方编码完成,直接在IDEA上运行ConsumerApplication类即可启动,如下图,红框中就是远程调用helloxmldirectprovider服务返回的内容:

亚马逊测评 www.yisuping.cn

你可能感兴趣的:(dubbo实战之一:准备和初体验)