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. 简单实例
首先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®istry=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:\Java\jdk1.6.0_29\jre
- Client environment:java.class.path=D:\shiva\omcs\gomeTest\target\classes;D:\local\repo\com\alibaba\rocketmq\rocketmq-client\3.0.4-open\rocketmq-client-3.0.4-open.jar;D:\local\repo\com\alibaba\rocketmq\rocketmq-common\3.0.4-open\rocketmq-common-3.0.4-open.jar;D:\local\repo\com\alibaba\rocketmq\rocketmq-remoting\3.0.4-open\rocketmq-remoting-3.0.4-open.jar;D:\local\repo\com\alibaba\fastjson\1.1.33\fastjson-1.1.33.jar;D:\local\repo\io\netty\netty-all\4.0.9.Final\netty-all-4.0.9.Final.jar;D:\local\repo\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;D:\local\repo\commons-io\commons-io\2.4\commons-io-2.4.jar;D:\local\repo\commons-httpclient\commons-httpclient\3.1\commons-httpclient-3.1.jar;D:\local\repo\commons-logging\commons-logging\1.0.4\commons-logging-1.0.4.jar;D:\local\repo\commons-codec\commons-codec\1.2\commons-codec-1.2.jar;D:\local\repo\org\apache\httpcomponents\httpclient\4.2.3\httpclient-4.2.3.jar;D:\local\repo\org\apache\httpcomponents\httpcore\4.2.3\httpcore-4.2.3.jar;D:\local\repo\org\apache\httpcomponents\httpmime\4.2.3\httpmime-4.2.3.jar;D:\local\repo\ch\qos\logback\logback-classic\1.1.1\logback-classic-1.1.1.jar;D:\local\repo\org\slf4j\slf4j-api\1.7.6\slf4j-api-1.7.6.jar;D:\local\repo\ch\qos\logback\logback-core\1.1.1\logback-core-1.1.1.jar;D:\local\repo\org\swinglabs\swingx\1.6.1\swingx-1.6.1.jar;D:\local\repo\com\jhlabs\filters\2.0.235\filters-2.0.235.jar;D:\local\repo\org\swinglabs\swing-worker\1.1\swing-worker-1.1.jar;D:\local\repo\redis\clients\jedis\2.4.2\jedis-2.4.2.jar;D:\local\repo\org\apache\commons\commons-pool2\2.0\commons-pool2-2.0.jar;D:\local\repo\org\springframework\spring-webmvc\3.1.0.RELEASE\spring-webmvc-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-asm\3.1.0.RELEASE\spring-asm-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-context-support\3.1.0.RELEASE\spring-context-support-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-web\3.1.0.RELEASE\spring-web-3.1.0.RELEASE.jar;D:\local\repo\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;D:\local\repo\org\springframework\spring-test\3.1.0.RELEASE\spring-test-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-expression\3.1.0.RELEASE\spring-expression-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-tx\3.1.0.RELEASE\spring-tx-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-aop\3.1.0.RELEASE\spring-aop-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-beans\3.1.0.RELEASE\spring-beans-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-core\3.1.0.RELEASE\spring-core-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-context\3.1.0.RELEASE\spring-context-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-jdbc\3.1.0.RELEASE\spring-jdbc-3.1.0.RELEASE.jar;D:\local\repo\org\quartz-scheduler\quartz\1.7.2\quartz-1.7.2.jar;D:\local\repo\com\alibaba\dubbo\2.0.13\dubbo-2.0.13.jar;D:\local\repo\org\springframework\spring\2.5.6.SEC03\spring-2.5.6.SEC03.jar;D:\local\repo\org\javassist\javassist\3.15.0-GA\javassist-3.15.0-GA.jar;D:\local\repo\org\jboss\netty\netty\3.2.5.Final\netty-3.2.5.Final.jar;D:\local\repo\org\apache\zookeeper\zookeeper\3.3.6\zookeeper-3.3.6.jar;D:\local\repo\jline\jline\0.9.94\jline-0.9.94.jar;D:\local\repo\log4j\log4j\1.2.16\log4j-1.2.16.jar;D:\local\repo\org\codehaus\jackson\jackson-core-asl\1.8.4\jackson-core-asl-1.8.4.jar;D:\local\repo\org\codehaus\jackson\jackson-mapper-asl\1.8.4\jackson-mapper-asl-1.8.4.jar;D:\local\repo\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;D:\local\repo\javax\servlet\jsp-api\2.0\jsp-api-2.0.jar
- Client environment:java.library.path=C:\Java\jdk1.6.0_29\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;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:\ProgramData\Oracle\Java\javapath;C:\Java\jdk1.8.0_31\bin;C:\Java\jdk1.8.0_31\jre\bin;C:\Windows\System32;d:\Program Files (x86)\Lua\5.1\clibs;GRADLE_HOME/bin;C:\Python27;D:\soft\maven\apache-maven-3.3.9\bin;$STORM_HOME/bin;C:\Program Files\TortoiseGit\bin;C:\Program Files\Mercurial;D:\soft\gradle-2.12-all\bin;D:\soft\spark\spark-2.1.0-bin-hadoop2.7\bin;%system%\system32;C:\Program Files (x86)\Google\Chrome\Application;C:\ProgramData\Oracle\Java\javapath;C:\Java\jdk1.8.0_31\bin;C:\Java\jdk1.8.0_31\jre\bin;C:\Windows\System32;d:\Program Files (x86)\Lua\5.1\clibs;GRADLE_HOME/bin;C:\Python27;D:\soft\maven\apache-maven-3.3.9\bin;$STORM_HOME\bin;D:\soft\gradle-2.12-all\bin;D:\soft\developer tools\eclipse-jee-mars-2-win32-x86_64\eclipse;;.
- Client environment:java.io.tmpdir=C:\Users\01107252\AppData\Local\Temp\
- 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:\user\01107252
- Client environment:user.dir=D:\shiva\omcs\gomeTest
- 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:\Java\jdk1.6.0_29\jre
- Client environment:java.class.path=D:\shiva\omcs\gomeTest\target\classes;D:\local\repo\com\alibaba\rocketmq\rocketmq-client\3.0.4-open\rocketmq-client-3.0.4-open.jar;D:\local\repo\com\alibaba\rocketmq\rocketmq-common\3.0.4-open\rocketmq-common-3.0.4-open.jar;D:\local\repo\com\alibaba\rocketmq\rocketmq-remoting\3.0.4-open\rocketmq-remoting-3.0.4-open.jar;D:\local\repo\com\alibaba\fastjson\1.1.33\fastjson-1.1.33.jar;D:\local\repo\io\netty\netty-all\4.0.9.Final\netty-all-4.0.9.Final.jar;D:\local\repo\commons-cli\commons-cli\1.2\commons-cli-1.2.jar;D:\local\repo\commons-io\commons-io\2.4\commons-io-2.4.jar;D:\local\repo\commons-httpclient\commons-httpclient\3.1\commons-httpclient-3.1.jar;D:\local\repo\commons-logging\commons-logging\1.0.4\commons-logging-1.0.4.jar;D:\local\repo\commons-codec\commons-codec\1.2\commons-codec-1.2.jar;D:\local\repo\org\apache\httpcomponents\httpclient\4.2.3\httpclient-4.2.3.jar;D:\local\repo\org\apache\httpcomponents\httpcore\4.2.3\httpcore-4.2.3.jar;D:\local\repo\org\apache\httpcomponents\httpmime\4.2.3\httpmime-4.2.3.jar;D:\local\repo\ch\qos\logback\logback-classic\1.1.1\logback-classic-1.1.1.jar;D:\local\repo\org\slf4j\slf4j-api\1.7.6\slf4j-api-1.7.6.jar;D:\local\repo\ch\qos\logback\logback-core\1.1.1\logback-core-1.1.1.jar;D:\local\repo\org\swinglabs\swingx\1.6.1\swingx-1.6.1.jar;D:\local\repo\com\jhlabs\filters\2.0.235\filters-2.0.235.jar;D:\local\repo\org\swinglabs\swing-worker\1.1\swing-worker-1.1.jar;D:\local\repo\redis\clients\jedis\2.4.2\jedis-2.4.2.jar;D:\local\repo\org\apache\commons\commons-pool2\2.0\commons-pool2-2.0.jar;D:\local\repo\org\springframework\spring-webmvc\3.1.0.RELEASE\spring-webmvc-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-asm\3.1.0.RELEASE\spring-asm-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-context-support\3.1.0.RELEASE\spring-context-support-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-web\3.1.0.RELEASE\spring-web-3.1.0.RELEASE.jar;D:\local\repo\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;D:\local\repo\org\springframework\spring-test\3.1.0.RELEASE\spring-test-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-expression\3.1.0.RELEASE\spring-expression-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-tx\3.1.0.RELEASE\spring-tx-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-aop\3.1.0.RELEASE\spring-aop-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-beans\3.1.0.RELEASE\spring-beans-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-core\3.1.0.RELEASE\spring-core-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-context\3.1.0.RELEASE\spring-context-3.1.0.RELEASE.jar;D:\local\repo\org\springframework\spring-jdbc\3.1.0.RELEASE\spring-jdbc-3.1.0.RELEASE.jar;D:\local\repo\org\quartz-scheduler\quartz\1.7.2\quartz-1.7.2.jar;D:\local\repo\com\alibaba\dubbo\2.0.13\dubbo-2.0.13.jar;D:\local\repo\org\springframework\spring\2.5.6.SEC03\spring-2.5.6.SEC03.jar;D:\local\repo\org\javassist\javassist\3.15.0-GA\javassist-3.15.0-GA.jar;D:\local\repo\org\jboss\netty\netty\3.2.5.Final\netty-3.2.5.Final.jar;D:\local\repo\org\apache\zookeeper\zookeeper\3.3.6\zookeeper-3.3.6.jar;D:\local\repo\jline\jline\0.9.94\jline-0.9.94.jar;D:\local\repo\log4j\log4j\1.2.16\log4j-1.2.16.jar;D:\local\repo\org\codehaus\jackson\jackson-core-asl\1.8.4\jackson-core-asl-1.8.4.jar;D:\local\repo\org\codehaus\jackson\jackson-mapper-asl\1.8.4\jackson-mapper-asl-1.8.4.jar;D:\local\repo\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar;D:\local\repo\javax\servlet\jsp-api\2.0\jsp-api-2.0.jar
- Client environment:java.library.path=C:\Java\jdk1.6.0_29\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;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:\ProgramData\Oracle\Java\javapath;C:\Java\jdk1.8.0_31\bin;C:\Java\jdk1.8.0_31\jre\bin;C:\Windows\System32;d:\Program Files (x86)\Lua\5.1\clibs;GRADLE_HOME/bin;C:\Python27;D:\soft\maven\apache-maven-3.3.9\bin;$STORM_HOME/bin;C:\Program Files\TortoiseGit\bin;C:\Program Files\Mercurial;D:\soft\gradle-2.12-all\bin;D:\soft\spark\spark-2.1.0-bin-hadoop2.7\bin;%system%\system32;C:\Program Files (x86)\Google\Chrome\Application;C:\ProgramData\Oracle\Java\javapath;C:\Java\jdk1.8.0_31\bin;C:\Java\jdk1.8.0_31\jre\bin;C:\Windows\System32;d:\Program Files (x86)\Lua\5.1\clibs;GRADLE_HOME/bin;C:\Python27;D:\soft\maven\apache-maven-3.3.9\bin;$STORM_HOME\bin;D:\soft\gradle-2.12-all\bin;D:\soft\developer tools\eclipse-jee-mars-2-win32-x86_64\eclipse;;.
- Client environment:java.io.tmpdir=C:\Users\01107252\AppData\Local\Temp\
- 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:\user\01107252
- Client environment:user.dir=D:\shiva\omcs\gomeTest
- 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:\soft\jdk\jdk1.7.0_64.01\jdk1.7.0_64
set JRE_HOME=D:\soft\jdk\jdk1.7.0_64.01\jdk1.7.0_64\jre
其中后面为指定的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监控中心
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>
Dubbo入门之一:实例1的更多相关文章
- Dubbo入门—搭建一个最简单的Demo框架
一.Dubbo背景和简介 1.电商系统的演进 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. a.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一 ...
- dubbo学习实践(2)之Dubbo入门Demo
开篇之前,先来了解下dubbo服务治理与技术架构,直接看图 dubbo技术架构图: 1. 新建dubbo项目,目录结构如下 代码说明: 1.代码分为Provider(服务提供方)与consumer(服 ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- 基于MAVEN使用IDEA创建dubbo入门项目图文教程
花了很长时间没有找到一个很详细的图文教程来学习dubbo入门框架,故记录下来. 一: 项目工程目录 简单介绍项目目录结构: 二: 创建父工程 具体操作步骤: 1,打开IDEA,按下面步骤来 File- ...
- dubbo入门学习笔记之入门demo(基于普通maven项目)
注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...
- Dubbo入门---搭建一个最简单的Demo框架(转)
Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. ...
- dubbo请求报文实例
dubbo请求报文实例: ============================================= Request [ id=6723668, // 消息ID,Long类型 vers ...
- freemarker语法介绍及其入门教程实例
# freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>#### 1.文本,直接输 ...
- [转]Scrapy简单入门及实例讲解
Scrapy简单入门及实例讲解 中文文档: http://scrapy-chs.readthedocs.io/zh_CN/0.24/ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用 ...
- dubbo入门之微服务客户端服务端配置
正常一个服务不会只做客户端或者只做服务端,一般的微服务都是服务与服务相互调用,那么,应该怎么配置呢?接着之前的dubbo入门之helloWorld,我们再改改配置,即可实现正常的微服务架构.与之前相比 ...
随机推荐
- 模型融合之blending和stacking
1. blending 需要得到各个模型结果集的权重,然后再线性组合. """Kaggle competition: Predicting a Biological Re ...
- poj 2186 Popular Cows 【强连通分量Tarjan算法 + 树问题】
题目地址:http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Sub ...
- python 处理json
Python处理JSON 概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XM ...
- 比较好的sql写法
DECLARE @beginTime VARCHAR(20)= '2017-11-13 00:00:00';DECLARE @endTime VARCHAR(20)= '2017-11-13 23:0 ...
- keystone cache
http://docs.openstack.org/juno/config-reference/content/section_keystone.conf.html http://docs.opens ...
- 委托+内置委托方法+多播委托+lambda表达式+事件
委托概念:如果我们要把方法当做参数来传递的话,就要用到委托.简单来说委托是一个类型,这个类型可以赋值一个方法的引用. 声明委托: 在C#中使用一个类分两个阶段,首选定义这个类,告诉编译器这个类由什么字 ...
- SQL SERVER 集合
死锁和堵塞一直是性能测试执行中关注的重点. 下面是我整理的监控sql server数据库,在性能测试过程中是否出现死锁.堵塞的SQL语句,还算比较准备,留下来备用. --每秒死锁数量 SELECT * ...
- 清北学堂(2019 5 1) part 4
今天讲数论 1.进制问题(将n转换成k进制数): 1.方法:短除法 将n/k,保存,将商当做新的n,将余数保存,直到商为0,将余数(包括0),倒序输出,即得n的k进制数 2.关于高精四则运算(我本以为 ...
- The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server,错误: 15128)
记录下 The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Micr ...
- nginx Win下实现简单的负载均衡(1)nginx搭建部署
快速目录: 一.nginx Win下实现简单的负载均衡(1)nginx搭建部署 二.nginx Win下实现简单的负载均衡(2)站点共享Session 三.nginx Win下实现简单的负载均衡(3) ...