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>
  • 相关阅读:
    Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
    Linkerd 2.10(Step by Step)—多集群通信
    Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
    Linkerd 2.10(Step by Step)—控制平面调试端点
    Linkerd 2.10(Step by Step)—配置超时
    Linkerd 2.10(Step by Step)—配置重试
    Linkerd 2.10(Step by Step)—配置代理并发
    本地正常运行,线上环境诡异异常原因集合
    Need to invoke method 'xxx' declared on target class 'yyy', but not found in any interface(s) of the exposed proxy type
    alpine 安装常用命令
  • 原文地址:https://www.cnblogs.com/duanxz/p/3578271.html
Copyright © 2011-2022 走看看