zoukankan      html  css  js  c++  java
  • Dubbo入门之一:实例1

    原文地址:http://blog.csdn.net/ruishenh/article/details/23180707?utm_source=tuicool

    1.   概述

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案

    主要核心部件

    Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制.

    RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

    Registry: 服务目录框架用于服务的注册和服务事件发布和订阅。

    Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

    2.   简单实例

    demo文件下载:http://download.csdn.net/detail/ruishenh/7164585
     

    首先maven项目增加dubbo的jar依赖,因为要用到zookeeper注册中心,也要依赖但是要去掉自带的log4j不然会默认的版本依赖jms-1.1.jar jmxtools-1.2.1.jar jmxri-1.2.1.jar等3个包,下载挺麻烦,当然如果个人已经在自己的仓库中有了就无所谓了。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.ruishenh</groupId>
        <artifactId>gomeTest</artifactId>
        <packaging>war</packaging>
        <version>0.0.1-SNAPSHOT</version>
        <name>gomeTest Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <spring.version>3.1.0.RELEASE</spring.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.rocketmq</groupId>
                <artifactId>rocketmq-all</artifactId>
                <version>3.0.4-open</version>
                <type>pom</type>
            </dependency>
            <dependency>
                <groupId>com.alibaba.rocketmq</groupId>
                <artifactId>rocketmq-client</artifactId>
                <version>3.0.4-open</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.rocketmq</groupId>
                <artifactId>rocketmq-common</artifactId>
                <version>3.0.4-open</version>
            </dependency>
            <dependency>
                <groupId>commons-httpclient</groupId>
                <artifactId>commons-httpclient</artifactId>
                <version>3.1</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.2.3</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpcore</artifactId>
                <version>4.2.3</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpmime</artifactId>
                <version>4.2.3</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.1</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.1</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.swinglabs</groupId>
                <artifactId>swingx</artifactId>
                <version>1.6.1</version>
            </dependency>
            <!--Redis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.4.2</version>
                <type>jar</type>
                <scope>compile</scope>
            </dependency>
            <!-- spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- 定时器 -->
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
                <version>1.7.2</version>
            </dependency>
            <!-- dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.0.13</version>
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.3.6</version>
                <exclusions>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
            <!-- spring mvc 返回 json使用 -->
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-asl</artifactId>
                <version>1.8.4</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.8.4</version>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.12.4</version>
                    <configuration>
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <version>6.1.26</version>
                    <configuration>
                        <connectors>
                            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                                <port>8090</port>
                                <maxIdleTime>60000</maxIdleTime>
                            </connector>
                        </connectors>
                    </configuration>
                </plugin>
            </plugins>
            <finalName>gomeTest</finalName>
        </build>
    </project>

    Spring的依赖自己添加就好了

    因为要增加zookeeper的注册管理,所以如果有可用的zookeeper就用可用的zookeeper,没有可以按照如下的安装去本地安装一个。

    zk 02之 Windows安装和使用zookeeper

    项目结构图


    /gomeTest/src/main/resources/spring/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="hello-world-app" />
    
        <!-- zookeeper注册中心 -->
        <dubbo:registry protocol="zookeeper" address="10.118.62.89:2181" />
        <!-- 使用multicast广播注册中心暴露服务地址 -->
        <!-- <dubbo:registry address="multicast://10.57.41.19:1234" /> -->
        <dubbo:protocol name="dubbo" port="20880" />
        <dubbo:service interface="com.ruishenh.dubbo.example.DemoService" ref="demoService" />
        <!-- 和本地bean一样实现服务 -->
        <bean id="demoService" class="com.ruishenh.dubbo.example.DemoServiceImpl" />
    </beans>

    /gomeTest/src/main/resources/spring/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-of-helloworld-app" />
        <!-- zookeeper注册中心 -->
        <dubbo:registry  protocol="zookeeper" address="10.118.62.89:2181" />  
        <!-- 使用multicast广播注册中心暴露的服务地址 -->
        <!--<dubbo:registry address="multicast://10.57.41.19:1234" /> -->
         <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
        <dubbo:reference id="demoService" interface="com.ruishenh.dubbo.example.DemoService" />
    </beans>

    /gomeTest/src/main/java/com/ruishenh/dubbo/example/DemoService.java

    package com.ruishenh.dubbo.example;
    public interface DemoService {
        
        public void sayHello();
        
        public String returnHello();
        
        public MsgInfo returnMsgInfo(MsgInfo info);
        
    }

    /gomeTest/src/main/java/com/ruishenh/dubbo/example/DemoServiceImpl.java

    package com.ruishenh.dubbo.example;
    
    public class DemoServiceImpl implements DemoService{
        
        public void sayHello() {
            System.out.println("hello world!");
        }
    
        public String returnHello() {
            return "hello world!";
        }
    
        public MsgInfo returnMsgInfo(MsgInfo info) {
            info.getMsgs().add("处理完毕");
            return info;
        }
    }

    /gomeTest/src/main/java/com/ruishenh/dubbo/example/LuncherProvider.java

    package com.ruishenh.dubbo.example;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    
    public class LuncherProvider  {
        public static void main(String[] args) throws InterruptedException{
            LuncherProvider luncher=new LuncherProvider();
            luncher.start();
            Thread.sleep(1000*60*10);
        }
        
        void start(){
            String configLocation="spring/dubbo-provider.xml";
            ApplicationContext context =new  ClassPathXmlApplicationContext(configLocation);
            String [] names=context.getBeanDefinitionNames();
            System.out.print("Beans:");
            for (String string : names)
                System.out.print(string+",");
            System.out.println();
        }
    }

    /gomeTest/src/main/java/com/ruishenh/dubbo/example/LuncherConsumer.java

    package com.ruishenh.dubbo.example;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    
    public class LuncherConsumer  {
        public static void main(String[] args) throws InterruptedException{
            LuncherConsumer luncher=new LuncherConsumer();
            luncher.start();
        }
        
        
        void start(){
            String configLocation="spring/dubbo-consumer.xml";
            ApplicationContext context =new  ClassPathXmlApplicationContext(configLocation);
            DemoService ds=(DemoService) context.getBean("demoService");
            String [] names=context.getBeanDefinitionNames();
            System.out.print("Beans:");
            for (String string : names) {
                System.out.print(string);
                System.out.print(",");
            }
            System.out.println();
            
            MsgInfo info =new MsgInfo();
            info.setId(1);
            info.setName("ruisheh");
            List<String> msgs=new ArrayList<String>();
            msgs.add("I");
            msgs.add("am");
            msgs.add("test");
            info.setMsgs(msgs);
            
            
            System.out.println(ds.returnMsgInfo(info).getMsgs());
        }
    }

    /gomeTest/src/main/java/com/ruishenh/dubbo/example/MsgInfo.java

    package com.ruishenh.dubbo.example;
    
    import java.io.Serializable;
    import java.util.List;
    
    public class MsgInfo implements Serializable {
    
        private static final long serialVersionUID = -2814022769568306965L;
    
        int id;
        String name;
        List<String> msgs;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public List<String> getMsgs() {
            return msgs;
        }
    
        public void setMsgs(List<String> msgs) {
            this.msgs = msgs;
        }
    
    }

    //启动provider:运行LuncherProvider.java

    - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5829428e: startup date [Fri Mar 31 16:21:30 CST 2017]; root of context hierarchy
    - Loading XML bean definitions from class path resource [spring/dubbo-provider.xml]
    - using logger: com.alibaba.dubbo.common.logger.support.Log4jLoggerFactory
    - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7cfefe3f: defining beans [hello-world-app,com.alibaba.dubbo.config.RegistryConfig,dubbo,com.ruishenh.dubbo.example.DemoService,demoService]; root of factory hierarchy
    -  [DUBBO] No dubbo.properties found on the class path., dubbo version: 2.0.13, current host: 127.0.0.1
    -  [DUBBO] Export dubbo service com.ruishenh.dubbo.example.DemoService to url dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=hello-world-app&dubbo=2.0.13&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=, dubbo version: 2.0.13, current host: 127.0.0.1
    -  [DUBBO] Register dubbo service com.ruishenh.dubbo.example.DemoService url dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=hello-world-app&dubbo=2.0.13&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision= to registry registry://10.118.62.89:2181/com.alibaba.dubbo.registry.RegistryService?application=hello-world-app&registry=zookeeper, dubbo version: 2.0.13, current host: 127.0.0.1
    -  [DUBBO] Start NettyServer bind /0.0.0.0:20880, export /10.118.62.89:20880, dubbo version: 2.0.13, current host: 127.0.0.1
    - Client environment:zookeeper.version=3.3.6-1366786, built on 07/29/2012 06:22 GMT
    - Client environment:host.name=SF0001107252A.sf.com
    - Client environment:java.version=1.6.0_29
    - Client environment:java.vendor=Sun Microsystems Inc.
    - Client environment:java.home=C:Javajdk1.6.0_29jre
    - Client environment:java.class.path=D:shivaomcsgomeTest	argetclasses;D:local
    epocomalibaba
    ocketmq
    ocketmq-client3.0.4-open
    ocketmq-client-3.0.4-open.jar;D:local
    epocomalibaba
    ocketmq
    ocketmq-common3.0.4-open
    ocketmq-common-3.0.4-open.jar;D:local
    epocomalibaba
    ocketmq
    ocketmq-remoting3.0.4-open
    ocketmq-remoting-3.0.4-open.jar;D:local
    epocomalibabafastjson1.1.33fastjson-1.1.33.jar;D:local
    epoio
    etty
    etty-all4.0.9.Final
    etty-all-4.0.9.Final.jar;D:local
    epocommons-clicommons-cli1.2commons-cli-1.2.jar;D:local
    epocommons-iocommons-io2.4commons-io-2.4.jar;D:local
    epocommons-httpclientcommons-httpclient3.1commons-httpclient-3.1.jar;D:local
    epocommons-loggingcommons-logging1.0.4commons-logging-1.0.4.jar;D:local
    epocommons-codeccommons-codec1.2commons-codec-1.2.jar;D:local
    epoorgapachehttpcomponentshttpclient4.2.3httpclient-4.2.3.jar;D:local
    epoorgapachehttpcomponentshttpcore4.2.3httpcore-4.2.3.jar;D:local
    epoorgapachehttpcomponentshttpmime4.2.3httpmime-4.2.3.jar;D:local
    epochqoslogbacklogback-classic1.1.1logback-classic-1.1.1.jar;D:local
    epoorgslf4jslf4j-api1.7.6slf4j-api-1.7.6.jar;D:local
    epochqoslogbacklogback-core1.1.1logback-core-1.1.1.jar;D:local
    epoorgswinglabsswingx1.6.1swingx-1.6.1.jar;D:local
    epocomjhlabsfilters2.0.235filters-2.0.235.jar;D:local
    epoorgswinglabsswing-worker1.1swing-worker-1.1.jar;D:local
    epo
    edisclientsjedis2.4.2jedis-2.4.2.jar;D:local
    epoorgapachecommonscommons-pool22.0commons-pool2-2.0.jar;D:local
    epoorgspringframeworkspring-webmvc3.1.0.RELEASEspring-webmvc-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-asm3.1.0.RELEASEspring-asm-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-context-support3.1.0.RELEASEspring-context-support-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-web3.1.0.RELEASEspring-web-3.1.0.RELEASE.jar;D:local
    epoaopallianceaopalliance1.0aopalliance-1.0.jar;D:local
    epoorgspringframeworkspring-test3.1.0.RELEASEspring-test-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-expression3.1.0.RELEASEspring-expression-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-tx3.1.0.RELEASEspring-tx-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-aop3.1.0.RELEASEspring-aop-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-beans3.1.0.RELEASEspring-beans-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-core3.1.0.RELEASEspring-core-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-context3.1.0.RELEASEspring-context-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-jdbc3.1.0.RELEASEspring-jdbc-3.1.0.RELEASE.jar;D:local
    epoorgquartz-schedulerquartz1.7.2quartz-1.7.2.jar;D:local
    epocomalibabadubbo2.0.13dubbo-2.0.13.jar;D:local
    epoorgspringframeworkspring2.5.6.SEC03spring-2.5.6.SEC03.jar;D:local
    epoorgjavassistjavassist3.15.0-GAjavassist-3.15.0-GA.jar;D:local
    epoorgjboss
    etty
    etty3.2.5.Final
    etty-3.2.5.Final.jar;D:local
    epoorgapachezookeeperzookeeper3.3.6zookeeper-3.3.6.jar;D:local
    epojlinejline.9.94jline-0.9.94.jar;D:local
    epolog4jlog4j1.2.16log4j-1.2.16.jar;D:local
    epoorgcodehausjacksonjackson-core-asl1.8.4jackson-core-asl-1.8.4.jar;D:local
    epoorgcodehausjacksonjackson-mapper-asl1.8.4jackson-mapper-asl-1.8.4.jar;D:local
    epojavaxservletservlet-api2.5servlet-api-2.5.jar;D:local
    epojavaxservletjsp-api2.0jsp-api-2.0.jar
    - Client environment:java.library.path=C:Javajdk1.6.0_29in;C:WindowsSunJavain;C:Windowssystem32;C:Windows;C:/Java/jre1.8.0_31/bin/server;C:/Java/jre1.8.0_31/bin;C:/Java/jre1.8.0_31/lib/amd64;C:ProgramDataOracleJavajavapath;C:Javajdk1.8.0_31in;C:Javajdk1.8.0_31jrein;C:WindowsSystem32;d:Program Files (x86)Lua5.1clibs;GRADLE_HOME/bin;C:Python27;D:softmavenapache-maven-3.3.9in;$STORM_HOME/bin;C:Program FilesTortoiseGitin;C:Program FilesMercurial;D:softgradle-2.12-allin;D:softsparkspark-2.1.0-bin-hadoop2.7in;%system%system32;C:Program Files (x86)GoogleChromeApplication;C:ProgramDataOracleJavajavapath;C:Javajdk1.8.0_31in;C:Javajdk1.8.0_31jrein;C:WindowsSystem32;d:Program Files (x86)Lua5.1clibs;GRADLE_HOME/bin;C:Python27;D:softmavenapache-maven-3.3.9in;$STORM_HOMEin;D:softgradle-2.12-allin;D:softdeveloper toolseclipse-jee-mars-2-win32-x86_64eclipse;;.
    - Client environment:java.io.tmpdir=C:Users1107252AppDataLocalTemp
    - Client environment:java.compiler=<NA>
    - Client environment:os.name=Windows 7
    - Client environment:os.arch=amd64
    - Client environment:os.version=6.1
    - Client environment:user.name=01107252
    - Client environment:user.home=d:user1107252
    - Client environment:user.dir=D:shivaomcsgomeTest
    - Initiating client connection, connectString=10.118.62.89:2181 sessionTimeout=60000 watcher=com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry$1@6b12da40
    -  [DUBBO] Register: dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=hello-world-app&dubbo=2.0.13&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=, dubbo version: 2.0.13, current host: 127.0.0.1
    - Opening socket connection to server /10.118.62.89:2181
    - Socket connection established to SF0001107252A.sf.com/10.118.62.89:2181, initiating session
    - Session establishment complete on server SF0001107252A.sf.com/10.118.62.89:2181, sessionid = 0x15b23746f340000, negotiated timeout = 40000
    -  [DUBBO] Recover register services [dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=hello-world-app&dubbo=2.0.13&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=], dubbo version: 2.0.13, current host: 127.0.0.1
    -  [DUBBO] Register: dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=hello-world-app&dubbo=2.0.13&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=, dubbo version: 2.0.13, current host: 127.0.0.1
    Beans:hello-world-app,com.alibaba.dubbo.config.RegistryConfig,dubbo,com.ruishenh.dubbo.example.DemoService,demoService,
    -  [DUBBO] All clients has discontected from /10.118.62.89:20880. You can graceful shutdown now., dubbo version: 2.0.13, current host: 127.0.0.1
    -  [DUBBO] disconected from /10.118.62.89:57216,url:dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=hello-world-app&channel.readonly.sent=true&codec=dubbo&codec.downstream=dubbo&dubbo=2.0.13&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=, dubbo version: 2.0.13, current host: 127.0.0.1

    //启动Consumer:运行LuncherConsumer.java

    - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7d2a1e44: startup date [Fri Mar 31 16:21:40 CST 2017]; root of context hierarchy
    - Loading XML bean definitions from class path resource [spring/dubbo-consumer.xml]
    - using logger: com.alibaba.dubbo.common.logger.support.Log4jLoggerFactory
    - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@667cbde6: defining beans [consumer-of-helloworld-app,com.alibaba.dubbo.config.RegistryConfig,demoService]; root of factory hierarchy
    -  [DUBBO] No dubbo.properties found on the class path., dubbo version: 2.0.13, current host: 127.0.0.1
    - Client environment:zookeeper.version=3.3.6-1366786, built on 07/29/2012 06:22 GMT
    - Client environment:host.name=SF0001107252A.sf.com
    - Client environment:java.version=1.6.0_29
    - Client environment:java.vendor=Sun Microsystems Inc.
    - Client environment:java.home=C:Javajdk1.6.0_29jre
    - Client environment:java.class.path=D:shivaomcsgomeTest	argetclasses;D:local
    epocomalibaba
    ocketmq
    ocketmq-client3.0.4-open
    ocketmq-client-3.0.4-open.jar;D:local
    epocomalibaba
    ocketmq
    ocketmq-common3.0.4-open
    ocketmq-common-3.0.4-open.jar;D:local
    epocomalibaba
    ocketmq
    ocketmq-remoting3.0.4-open
    ocketmq-remoting-3.0.4-open.jar;D:local
    epocomalibabafastjson1.1.33fastjson-1.1.33.jar;D:local
    epoio
    etty
    etty-all4.0.9.Final
    etty-all-4.0.9.Final.jar;D:local
    epocommons-clicommons-cli1.2commons-cli-1.2.jar;D:local
    epocommons-iocommons-io2.4commons-io-2.4.jar;D:local
    epocommons-httpclientcommons-httpclient3.1commons-httpclient-3.1.jar;D:local
    epocommons-loggingcommons-logging1.0.4commons-logging-1.0.4.jar;D:local
    epocommons-codeccommons-codec1.2commons-codec-1.2.jar;D:local
    epoorgapachehttpcomponentshttpclient4.2.3httpclient-4.2.3.jar;D:local
    epoorgapachehttpcomponentshttpcore4.2.3httpcore-4.2.3.jar;D:local
    epoorgapachehttpcomponentshttpmime4.2.3httpmime-4.2.3.jar;D:local
    epochqoslogbacklogback-classic1.1.1logback-classic-1.1.1.jar;D:local
    epoorgslf4jslf4j-api1.7.6slf4j-api-1.7.6.jar;D:local
    epochqoslogbacklogback-core1.1.1logback-core-1.1.1.jar;D:local
    epoorgswinglabsswingx1.6.1swingx-1.6.1.jar;D:local
    epocomjhlabsfilters2.0.235filters-2.0.235.jar;D:local
    epoorgswinglabsswing-worker1.1swing-worker-1.1.jar;D:local
    epo
    edisclientsjedis2.4.2jedis-2.4.2.jar;D:local
    epoorgapachecommonscommons-pool22.0commons-pool2-2.0.jar;D:local
    epoorgspringframeworkspring-webmvc3.1.0.RELEASEspring-webmvc-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-asm3.1.0.RELEASEspring-asm-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-context-support3.1.0.RELEASEspring-context-support-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-web3.1.0.RELEASEspring-web-3.1.0.RELEASE.jar;D:local
    epoaopallianceaopalliance1.0aopalliance-1.0.jar;D:local
    epoorgspringframeworkspring-test3.1.0.RELEASEspring-test-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-expression3.1.0.RELEASEspring-expression-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-tx3.1.0.RELEASEspring-tx-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-aop3.1.0.RELEASEspring-aop-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-beans3.1.0.RELEASEspring-beans-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-core3.1.0.RELEASEspring-core-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-context3.1.0.RELEASEspring-context-3.1.0.RELEASE.jar;D:local
    epoorgspringframeworkspring-jdbc3.1.0.RELEASEspring-jdbc-3.1.0.RELEASE.jar;D:local
    epoorgquartz-schedulerquartz1.7.2quartz-1.7.2.jar;D:local
    epocomalibabadubbo2.0.13dubbo-2.0.13.jar;D:local
    epoorgspringframeworkspring2.5.6.SEC03spring-2.5.6.SEC03.jar;D:local
    epoorgjavassistjavassist3.15.0-GAjavassist-3.15.0-GA.jar;D:local
    epoorgjboss
    etty
    etty3.2.5.Final
    etty-3.2.5.Final.jar;D:local
    epoorgapachezookeeperzookeeper3.3.6zookeeper-3.3.6.jar;D:local
    epojlinejline.9.94jline-0.9.94.jar;D:local
    epolog4jlog4j1.2.16log4j-1.2.16.jar;D:local
    epoorgcodehausjacksonjackson-core-asl1.8.4jackson-core-asl-1.8.4.jar;D:local
    epoorgcodehausjacksonjackson-mapper-asl1.8.4jackson-mapper-asl-1.8.4.jar;D:local
    epojavaxservletservlet-api2.5servlet-api-2.5.jar;D:local
    epojavaxservletjsp-api2.0jsp-api-2.0.jar
    - Client environment:java.library.path=C:Javajdk1.6.0_29in;C:WindowsSunJavain;C:Windowssystem32;C:Windows;C:/Java/jre1.8.0_31/bin/server;C:/Java/jre1.8.0_31/bin;C:/Java/jre1.8.0_31/lib/amd64;C:ProgramDataOracleJavajavapath;C:Javajdk1.8.0_31in;C:Javajdk1.8.0_31jrein;C:WindowsSystem32;d:Program Files (x86)Lua5.1clibs;GRADLE_HOME/bin;C:Python27;D:softmavenapache-maven-3.3.9in;$STORM_HOME/bin;C:Program FilesTortoiseGitin;C:Program FilesMercurial;D:softgradle-2.12-allin;D:softsparkspark-2.1.0-bin-hadoop2.7in;%system%system32;C:Program Files (x86)GoogleChromeApplication;C:ProgramDataOracleJavajavapath;C:Javajdk1.8.0_31in;C:Javajdk1.8.0_31jrein;C:WindowsSystem32;d:Program Files (x86)Lua5.1clibs;GRADLE_HOME/bin;C:Python27;D:softmavenapache-maven-3.3.9in;$STORM_HOMEin;D:softgradle-2.12-allin;D:softdeveloper toolseclipse-jee-mars-2-win32-x86_64eclipse;;.
    - Client environment:java.io.tmpdir=C:Users1107252AppDataLocalTemp
    - Client environment:java.compiler=<NA>
    - Client environment:os.name=Windows 7
    - Client environment:os.arch=amd64
    - Client environment:os.version=6.1
    - Client environment:user.name=01107252
    - Client environment:user.home=d:user1107252
    - Client environment:user.dir=D:shivaomcsgomeTest
    - Initiating client connection, connectString=10.118.62.89:2181 sessionTimeout=60000 watcher=com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry$1@1d96f4b5
    - Opening socket connection to server /10.118.62.89:2181
    - Socket connection established to SF0001107252A.sf.com/10.118.62.89:2181, initiating session
    -  [DUBBO] Subscribe: subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Register: subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello, dubbo version: 2.0.13, current host: 10.118.62.89
    - Session establishment complete on server SF0001107252A.sf.com/10.118.62.89:2181, sessionid = 0x15b23746f340001, negotiated timeout = 40000
    -  [DUBBO] Recover register services [subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello], dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Register: subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Recover subscribe services {subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello=[com.alibaba.dubbo.registry.support.RegistryDirectory@57922f46]}, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Subscribe: subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Register: subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Start NettyClient SF0001107252A/10.118.62.89 connect to the server /10.118.62.89:20880, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Refer dubbo service com.ruishenh.dubbo.example.DemoService from url zookeeper://10.118.62.89:2181/com.alibaba.dubbo.registry.RegistryService?anyhost=true&application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=, dubbo version: 2.0.13, current host: 10.118.62.89
    Beans:consumer-of-helloworld-app,com.alibaba.dubbo.config.RegistryConfig,demoService,
    [I, am, test, 处理完毕]
    -  [DUBBO] Run shutdown hook now., dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Close all registries [zookeeper://10.118.62.89:2181/com.alibaba.dubbo.registry.RegistryService?application=consumer-of-helloworld-app&refer=application%3Dconsumer-of-helloworld-app%26dubbo%3D2.0.13%26id%3DdemoService%26interface%3Dcom.ruishenh.dubbo.example.DemoService%26methods%3DreturnMsgInfo%2CreturnHello%2CsayHello], dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Destroy registry: zookeeper://10.118.62.89:2181/com.alibaba.dubbo.registry.RegistryService?application=consumer-of-helloworld-app&refer=application%3Dconsumer-of-helloworld-app%26dubbo%3D2.0.13%26id%3DdemoService%26interface%3Dcom.ruishenh.dubbo.example.DemoService%26methods%3DreturnMsgInfo%2CreturnHello%2CsayHello, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Unregister: subscribe://10.118.62.89/com.ruishenh.dubbo.example.DemoService?application=consumer-of-helloworld-app&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello, dubbo version: 2.0.13, current host: 10.118.62.89
    - Session: 0x15b23746f340001 closed
    -  [DUBBO] Destroy reference: dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=consumer-of-helloworld-app&check=false&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=, dubbo version: 2.0.13, current host: 10.118.62.89
    - EventThread shut down
    -  [DUBBO] Close netty channel [id: 0x1494cb8b, /10.118.62.89:57216 => /10.118.62.89:20880], dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Close dubbo connect: 10.118.62.89:0-->10.118.62.89:20880, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] Close dubbo connect: 10.118.62.89:0-->10.118.62.89:20880, dubbo version: 2.0.13, current host: 10.118.62.89
    -  [DUBBO] disconected from /10.118.62.89:20880,url:dubbo://10.118.62.89:20880/com.ruishenh.dubbo.example.DemoService?anyhost=true&application=consumer-of-helloworld-app&check=false&codec=dubbo&dubbo=2.0.13&id=demoService&interface=com.ruishenh.dubbo.example.DemoService&methods=returnMsgInfo,returnHello,sayHello&prompt=dubbo&revision=, dubbo version: 2.0.13, current host: 10.118.62.89

    在上面可以看到调用结果的输出。

    二、将web的http请求转到dubbo的服务上

    先将app-config.xml文件中的dubbo-provider.xml打开

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mongo="http://www.springframework.org/schema/data/mongo"
        xsi:schemaLocation="http://www.springframework.org/schema/aop  
            http://www.springframework.org/schema/aop/spring-aop.xsd  
            http://www.springframework.org/schema/beans  
            http://www.springframework.org/schema/beans/spring-beans.xsd  
            http://www.springframework.org/schema/context  
            http://www.springframework.org/schema/context/spring-context.xsd  
            http://www.springframework.org/schema/mvc  
            http://www.springframework.org/schema/mvc/spring-mvc.xsd  
            http://www.springframework.org/schema/tx  
            http://www.springframework.org/schema/tx/spring-tx.xsd">
        <!--将dubbo的配置文件导入 -->
        <import resource="dubbo-provider.xml" />
        <!-- <import resource="dubbo-consumer.xml" /> -->
    </beans>

    再看下web.xml文件的配置,web.xml位置:

    web.xml内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
        <display-name>gomeTest</display-name>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/app-*.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring/springmvc-servlet.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
        <filter>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
        </filter>
        <filter>
            <filter-name>EncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>HiddenHttpMethodFilter</filter-name>
            <servlet-name>springmvc</servlet-name>
        </filter-mapping>
        <filter-mapping>
            <filter-name>EncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <error-page>
            <error-code>404</error-code>
            <location>/WEB-INF/views/error/404.html</location>
        </error-page>
        <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    </web-app>

    在pom.xml中增加jetty的插件jetty-maven-plugin插件

        <build>
            <plugins>
            
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.12.4</version>
                    <configuration>
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>maven-jetty-plugin</artifactId>
                    <version>6.1.26</version>
                    <configuration>
                        <connectors>
                            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                                <port>8090</port>
                                <maxIdleTime>60000</maxIdleTime>
                            </connector>
                        </connectors>
                    </configuration>
                </plugin>
            </plugins>
            <finalName>gomeTest</finalName>
        </build>

    调试模式运行:

     启动成功后,访问http://localhost:8080/test/dubbo

    三、搭建Dubbo服务管理与监控平台

    1、安装Dubbo服务管理中心,需要选择一个Web容器,我们使用Tomcat服务器。首先下载Dubbo管理中心安装文件dubbo-admin-2.5.3.war,或者直接从源码构建得到该WAR文件;http://download.csdn.net/download/tangyali516/9219461

    2、下载tomcat7

    3、下载jdk1.7,http://download.csdn.net/download/zknxx/9662614(这里有两个包)

    4、修改tomcat默认使用的jdk版本
    1、windows平台
    在catalina.bat文件和setclasspath.bat文件开头的空白处加上如下两句(指定JDK):
    set JAVA_HOME=D:softjdkjdk1.7.0_64.01jdk1.7.0_64
    set JRE_HOME=D:softjdkjdk1.7.0_64.01jdk1.7.0_64jre

    其中后面为指定的jdk安装路径。

    2、linux平台
    在catalina.sh文件和setclasspath.sh文件开头的空白处加上如下两句(指定JDK)
    export JAVA_HOME=/usr/local/java/jdk1.6.0_18
    export JRE_HOME=/usr/local/java/jdk1.6.0_18/jre

    启动tomcat,dubbo-admin-2.5.3.war被解压,webapps/ROOT/WEB-INF/dubbo.properties,指定我们的注册中心地址以及登录密码,内容如下所示:

    dubbo.registry.address=zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
    dubbo.admin.root.password=root
    dubbo.admin.guest.password=guest

    然后访问地址http://10.10.4.130:8080/即可,根据配置文件指定的root用户密码,就可以登录Dubbo管理控制台。
    我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示:

    如图所示:

    上图中可以看出,该服务有两个独立的节点可以提供,因为配置的集群模式为failover,如果某个节点的服务发生故障无法使用,则会自动透明地重试另一个节点上的服务,这就不至于出现拒绝服务的情况。如果想要查看提供方某个节点上的服务详情,可以点击对应的IP:Port链接,示例如图所示:

    上图可以看到服务地址:

    1 dubbo://10.10.4.125:20880/org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService?actives=100&anyhost=true&application=chatroom-cluster-provider&cluster=failover&dubbo=0.0.1-SNAPSHOT&executes=200&interface=org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService&loadbalance=random&methods=getMaxOnlineUserCount,queryRoomUserCount&pid=30942&queryRoomUserCount.actives=50&queryRoomUserCount.loadbalance=leastactive&queryRoomUserCount.retries=2&queryRoomUserCount.timeout=500&retries=2&revision=0.0.1-SNAPSHOT&side=provider&timeout=1000×tamp=1427793652814&version=1.0.0

    如果我们直接暴露该地址也是可以的,不过这种直连的方式对服务消费方不是透明的,如果以后IP地址更换,也会影响调用方,所以最好是通过注册中心来隐蔽服务地址。同一个服务所部署在的多个节点上,也就对应对应着多个服务地址。另外,也可以对已经发布的服务进行控制,如修改访问控制、负载均衡相关配置内容等,可以通过上图中“消费者”查看服务消费方调用服务的情况,如图所示:
    dubbo-admin-consumers
    也在管理控制台可以对消费方进行管理控制。

    • Dubbo监控中心

    Dubbo监控中心是以Dubbo服务的形式发布到注册中心,和普通的服务时一样的。例如,我这里下载了Dubbo自带的简易监控中心文件dubbo-monitor-simple-2.5.3-assembly.tar.gz,下载地址:http://download.csdn.net/download/liweifengwf/7864009可以解压缩以后,修改配置文件~/dubbo-monitor-simple-2.5.3/conf/dubbo.properties的内容,如下所示:

    [sfapp@cmos1 bin]$ vi ../conf/dubbo.properties 
    
    ##
    # Copyright 1999-2011 Alibaba Group.
    #  
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #  
    #      http://www.apache.org/licenses/LICENSE-2.0
    #  
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    ##
    dubbo.container=log4j,spring,registry,jetty
    dubbo.application.name=simple-monitor
    dubbo.application.owner=
    #dubbo.registry.address=multicast://224.5.6.7:1234
    dubbo.registry.address=zookeeper://10.118.62.89:2181
    #dubbo.registry.address=redis://127.0.0.1:6379
    #dubbo.registry.address=dubbo://127.0.0.1:9090
    dubbo.protocol.port=7070
    dubbo.jetty.port=8080
    dubbo.jetty.directory=${user.home}/monitor
    dubbo.charts.directory=${dubbo.jetty.directory}/charts
    dubbo.statistics.directory=${user.home}/monitor/statistics
    dubbo.log4j.file=logs/dubbo-monitor-simple.log
    dubbo.log4j.level=WARN

    然后启动简易监控中心,执行如下命令:

    [sfapp@cmos1 duan]$ cd dubbo-monitor-simple-2.5.3/bin
    [sfapp@cmos1 bin]$ ./start.sh
    Starting the simple-monitor .......OK!
    PID: 120076
    STDOUT: logs/stdout.log

    这里使用了Jetty Web容器,访问地址http://10.202.11.117:8080/就可以查看监控中心,Applications选项卡页面包含了服务提供方和消费方的基本信息,如图所示:

    上图主要列出了所有提供方发布的服务、消费方调用、服务依赖关系等内容。
    接着,查看Services选项卡页面,包含了服务提供方提供的服务列表,如图所示:


    点击上图中Providers链接就能看到服务提供方的基本信息,包括服务地址等,如图所示:

    点击上图中Consumers链接就能看到服务消费方的基本信息,包括服务地址等,如图所示:

    由于上面是Dubbo自带的一个简易监控中心,可能所展现的内容并不能满足我们的需要,所以可以根据需要开发自己的监控中心。Dubbo也提供了监控中心的扩展接口,如果想要实现自己的监控中心,可以实现接口com.alibaba.dubbo.monitor.MonitorFactory和com.alibaba.dubbo.monitor.Monitor,其中MonitorFactory接口定义如下所示:

    /**
    * MonitorFactory. (SPI, Singleton, ThreadSafe)
    *
    * @author william.liangf
    */
    @SPI("dubbo")
    public interface MonitorFactory {
      
        /**
         * Create monitor.
         * @param url
         * @return monitor
         */
        @Adaptive("protocol")
        Monitor getMonitor(URL url);
     
    }

    Monitor接口定义如下所示:

    /**
    * Monitor. (SPI, Prototype, ThreadSafe)
    *
    * @see com.alibaba.dubbo.monitor.MonitorFactory#getMonitor(com.alibaba.dubbo.common.URL)
    * @author william.liangf
    */
    public interface Monitor extends Node, MonitorService {
    
    }

    具体定义内容可以查看MonitorService接口,不再累述。

    总结

    Dubbo还提供了其他很多高级特性,如路由规则、参数回调、服务分组、服务降级等等,而且很多特性在给出内置实现的基础上,还给出了扩展的接口,我们可以给出自定义的实现,非常方便而且强大。更多可以参考Dubbo官网用户手册和开发手册。

    附录:Dubbo使用Maven构建依赖配置

    <properties>
      <spring.version>3.2.8.RELEASE</spring.version>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <properties>
    <dependencies>
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>dubbo</artifactId>
          <version>2.5.3</version>
          <exclusions>
              <exclusion>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring</artifactId>
              </exclusion>
              <exclusion>
    
                  <groupId>org.apache.zookeeper</groupId>
                  <artifactId>zookeeper</artifactId>
              </exclusion>
              <exclusion>
                 <groupId>org.jboss.netty</groupId>
                  <artifactId>netty</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
    
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
    
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
      </dependency>
    
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
    
      </dependency>
    
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
      </dependency>
    
    
    
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.6.2</version>
      </dependency>
    
      <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.16</version>
      </dependency>
    
      <dependency>
          <groupId>org.javassist</groupId>
          <artifactId>javassist</artifactId>
          <version>3.15.0-GA</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>hessian-lite</artifactId>
          <version>3.2.1-fixed-2</version>
      </dependency>
      <dependency>
         <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.1.8</version>
      </dependency>
    
      <dependency>
          <groupId>org.jvnet.sorcerer</groupId>
          <artifactId>sorcerer-javac</artifactId>
          <version>0.8</version>
      </dependency>
      <dependency>
          <groupId>org.apache.zookeeper</groupId>
          <artifactId>zookeeper</artifactId>
          <version>3.4.5</version>
      </dependency>
      <dependency>
          <groupId>com.github.sgroschupf</groupId>
          <artifactId>zkclient</artifactId>
          <version>0.1</version>
      </dependency>
      <dependency>
          <groupId>org.jboss.netty</groupId>
          <artifactId>netty</artifactId>
          <version>3.2.7.Final</version>
      </dependency>
    </dependencies>
  • 相关阅读:
    [CVPR2017]Online Video Object Segmentation via Convolutional Trident Network
    [CVPR2018]Context-aware Deep Feature Compression for High-speed Visual Tracking
    光栅图形学(二):圆弧的扫描转换算法
    光栅图形学(一):直线段的扫描转换算法
    Vector使用
    STL源码剖析 — 空间配置器(allocator)
    C++ traits技术浅谈
    OpenCv 2.4.9 (二) 核心函数
    vs2017 android demo
    asp.net webapi 自托管插件式服务
  • 原文地址:https://www.cnblogs.com/duanxz/p/3578271.html
Copyright © 2011-2022 走看看