Dubbo_入门

来源:互联网 发布:蒙泰5.0软件官方下载 编辑:程序博客网 时间:2024/06/05 02:14
一、为什么要使用Dubbo
    1、各个应用节点中的url管理维护困难、依赖关系模糊(注册中心)
2、应用节点的性能、访问量、响应时间等无法进行评估(监控中心)
二、使用入门

首先搭建一个demo,我理解的大致图如下:



1、在pom中需要引入dubbo的依赖:

<dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency>      <groupId>com.alibaba</groupId>      <artifactId>dubbo</artifactId>      <version>2.5.3</version>    </dependency>    <dependency>      <groupId>com.github.sgroschupf</groupId>      <artifactId>zkclient</artifactId>      <version>0.1</version>    </dependency>  </dependencies>


2、在provider的项目中src/main/java/resources下添加log4j.properties(dubbo适配器默认使用log4j后续进行说明)

log4j.rootLogger=info, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n


3、在provider的模块或项目中添加src/main/java/resources/META-INF/spring/order-provider.xml的dubbo需要的spring配置,因为spring源码默认会到该路径下进行加载。

      引入命名空间:

<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配置说明在后续专门进行说明,将服务的接口进行暴露(也可以使用注解形式进行配置):

<!--服务发布的配置,需要暴露的服务接口-->    <dubbo:service interface="com.kevin.dubbo.order.IOrderServices" ref="orderService"/>    <!--Bean bean定义-->    <bean id="orderService" class="com.kevin.dubbo.order.OrderServiceImpl"/>

三、dubbo在zookeeper中的使用

在zookeeper的节点下可以看见注册的节点信息大致如下,因为dubbo的基于url总线的方式(其余参数则是dubbo基于我们的配置进行添加的参数信息):

dubbo://192.168.1.1/20880/com.kevin.dubbo.order.IOrderServices%3Fanyhost%3Dtrue%26application%3Dorder-provider%26dubbo%3D2.5.3%26interface%3Dcom.gupao.vip.mic.dubbo.order.IOrderServices%26methods%3DdoOrder%26owner%3Dmic%26pid%3D10804%26side%3Dprovider%26timestamp%3D1502890818766

节点大致如下



四、使用dubbo提供的方式启动

public class App {    public static void main( String[] args ) {        Main.main(args);    }}

dubbo使用的扩展和钩子机制,在后续进行说明,源码如下:

 * Copyright 1999-2011 Alibaba Group.package com.alibaba.dubbo.container;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.List;import com.alibaba.dubbo.common.Constants;import com.alibaba.dubbo.common.extension.ExtensionLoader;import com.alibaba.dubbo.common.logger.Logger;import com.alibaba.dubbo.common.logger.LoggerFactory;import com.alibaba.dubbo.common.utils.ConfigUtils;/** * Main. (API, Static, ThreadSafe) *  * @author william.liangf */public class Main {    public static final String CONTAINER_KEY = "dubbo.container";    public static final String SHUTDOWN_HOOK_KEY = "dubbo.shutdown.hook";        private static final Logger logger = LoggerFactory.getLogger(Main.class);    private static final ExtensionLoader<Container> loader = ExtensionLoader.getExtensionLoader(Container.class);        private static volatile boolean running = true;    public static void main(String[] args) {        try {            if (args == null || args.length == 0) {                String config = ConfigUtils.getProperty(CONTAINER_KEY, loader.getDefaultExtensionName());                args = Constants.COMMA_SPLIT_PATTERN.split(config);            }                        final List<Container> containers = new ArrayList<Container>();            for (int i = 0; i < args.length; i ++) {                containers.add(loader.getExtension(args[i]));            }            logger.info("Use container type(" + Arrays.toString(args) + ") to run dubbo serivce.");                        if ("true".equals(System.getProperty(SHUTDOWN_HOOK_KEY))) {            Runtime.getRuntime().addShutdownHook(new Thread() {                public void run() {                    for (Container container : containers) {                        try {                            container.stop();                            logger.info("Dubbo " + container.getClass().getSimpleName() + " stopped!");                        } catch (Throwable t) {                            logger.error(t.getMessage(), t);                        }                        synchronized (Main.class) {                            running = false;                            Main.class.notify();                        }                    }                }            });            }                        for (Container container : containers) {                container.start();                logger.info("Dubbo " + container.getClass().getSimpleName() + " started!");            }            System.out.println(new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]").format(new Date()) + " Dubbo service server started!");        } catch (RuntimeException e) {            e.printStackTrace();            logger.error(e.getMessage(), e);            System.exit(1);        }        synchronized (Main.class) {            while (running) {                try {                    Main.class.wait();                } catch (Throwable e) {                }            }        }    }    }



原创粉丝点击