目测很多公司,特别是互联网公司,更特别的是电商公司,很多都在使用dubbo作为服务框架,在网上找了例子,看看dubbo的简单使用。

看起来调用的方式和rmi和web service是类似的,具体深入点的区别还不是很了解,另外一点,网上很多教程都是基于maven的,看样子maven的使用真的是越来越广泛了,不使用maven,很多例子都难以下手,至于maven就不赘述了。

这个例子就是基于zookeeper + maven + dubbo + spring的例子

首先看一下运行结果:

启动zookeeper:

dubbo 案例 dubbo简单实例_spring

接着启动dubbo的服务端:

dubbo 案例 dubbo简单实例_spring_02

最后启动dubbo的客户端,调用服务端的服务:

客户端日志:

dubbo 案例 dubbo简单实例_开发工具_03

接收客户端请求后,返回响应时服务端的日志:

dubbo 案例 dubbo简单实例_java_04

整个的调用过程就是如此~!

 

下面看一下例子的搭建过程:

首先是zookeeper的搭建

这个我也是刚接触,可以百度相关教程,总体来说,简单的配置和启动不难。

下载zookeeper,解压到某路径下,如图:

dubbo 案例 dubbo简单实例_java_05

文件夹下的conf子文件夹是配置文件所在路径,

dubbo 案例 dubbo简单实例_java_06

主要是将zoo_sample.cfg复制一份修改为zoo.cfg,然后修改其中的配置:

dubbo 案例 dubbo简单实例_大数据_07

然后直接在子文件夹bin中双击启动

dubbo 案例 dubbo简单实例_spring_08

启动完毕

服务端搭建

服务端截图:

dubbo 案例 dubbo简单实例_spring_09

代码如下:

pom.xml



1 <project xmlns="http://maven.apache.org/POM/4.0.0" 
  2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
  4     http://maven.apache.org/maven-v4_0_0.xsd">
  5      
  6   <modelVersion>4.0.0</modelVersion>
  7 
  8   <groupId>com.mor.maven</groupId>
  9   <artifactId>dubboserver</artifactId>
 10   <version>0.0.1</version>
 11   <packaging>jar</packaging>
 12 
 13   <name>dubboserver</name>
 14   <url>http://maven.apache.org</url>
 15 
 16   <properties>
 17     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 18     <spring.version>3.2.13.RELEASE</spring.version>
 19     <slf4j.version>1.6.6</slf4j.version>
 20   </properties>
 21 
 22   <dependencies>
 23     <dependency>
 24       <groupId>junit</groupId>
 25       <artifactId>junit</artifactId>
 26       <version>3.8.1</version>
 27       <scope>test</scope>
 28     </dependency>
 29     <!-- Spring --> 
 30     <dependency>
 31         <groupId>org.springframework</groupId>
 32         <artifactId>spring-aop</artifactId>
 33         <version>${spring.version}</version>
 34     </dependency>
 35     <dependency>
 36         <groupId>org.springframework</groupId>
 37         <artifactId>spring-core</artifactId>
 38         <version>${spring.version}</version>
 39     </dependency>
 40     <dependency>
 41         <groupId>org.springframework</groupId>
 42         <artifactId>spring-beans</artifactId>
 43         <version>${spring.version}</version>
 44     </dependency>
 45     <dependency>
 46         <groupId>org.springframework</groupId>
 47         <artifactId>spring-context</artifactId>
 48         <version>${spring.version}</version>
 49     </dependency>
 50     <dependency>
 51         <groupId>org.springframework</groupId>
 52         <artifactId>spring-expression</artifactId>
 53         <version>${spring.version}</version>
 54     </dependency>
 55     <!-- spring end -->
 56     <!-- log -->
 57         <dependency>
 58             <groupId>log4j</groupId>
 59             <artifactId>log4j</artifactId>
 60             <version>1.2.16</version>
 61         </dependency>
 62         <dependency>
 63             <groupId>org.slf4j</groupId>
 64             <artifactId>slf4j-api</artifactId>
 65             <version>${slf4j.version}</version>
 66         </dependency>
 67         <dependency>
 68             <groupId>org.slf4j</groupId>
 69             <artifactId>slf4j-log4j12</artifactId>
 70             <version>${slf4j.version}</version>
 71         </dependency>
 72     <!-- dubbo -->
 73     <dependency>
 74       <groupId>com.alibaba</groupId>
 75       <artifactId>dubbo</artifactId>
 76       <version>2.5.3</version>
 77     </dependency>
 78     <!-- zkclient  -->
 79     <dependency>
 80       <groupId>com.github.sgroschupf</groupId>
 81       <artifactId>zkclient</artifactId>
 82       <version>0.1</version>
 83     </dependency>
 84     <!--  zookeeper -->
 85     <dependency>
 86       <groupId>org.apache.zookeeper</groupId>
 87       <artifactId>zookeeper</artifactId>
 88       <version>3.4.5</version> 
 89     </dependency>
 90   </dependencies>
 91  
 92    <build>  
 93         <finalName>dubbo-demo</finalName>
 94         <plugins>
 95             <plugin>  
 96                 <groupId>org.apache.maven.plugins</groupId>  
 97                 <artifactId>maven-compiler-plugin</artifactId>  
 98                 <version>2.1</version>  
 99                 <configuration>  
100                     <source>1.5</source>  
101                     <target>1.5</target>  
102                     <encoding>UTF-8</encoding>  
103                     <failOnError>false</failOnError>  
104                 </configuration>  
105             </plugin>
106         </plugins>  
107     </build>
108 </project>



applicationProvider.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" />
    <!-- 本机 伪集群 测试 -->
    <dubbo:registry protocol="zookeeper" address="192.168.10.171:2181" />
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:service interface="com.mor.server.dubbo.service.DemoServer" ref="demoService" />
    <!-- 和本地bean一样实现服务 -->
    <bean id="demoService" class="com.mor.server.dubbo.service.DemoServerImpl" />
</beans>



log4j.properties



log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.conversionPattern=%-5p - %-26.26c{1} - %m\n

log4j.rootLogger=INFO,Stdout

log4j.logger.org.apache.wicket=INFO
log4j.logger.org.apache.wicket.protocol.http.HttpSessionStore=INFO
log4j.logger.org.apache.wicket.version=INFO
log4j.logger.org.apache.wicket.RequestCycle=INFO



 

ServerMain.java



package com.mor.main;

import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ServerMain {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationProvider.xml" });
        context.start();
        System.out.println("按任意键退出");
        System.in.read();
    }
}



DemoServer.java



package com.mor.server.dubbo.service;

public interface DemoServer {
    String sayHello(String str);
}



DemoServerImpl.java



package com.mor.server.dubbo.service;
import java.util.Date;

public class DemoServerImpl implements DemoServer {
    public String sayHello(String str) {
        System.out.println("服务端-2-:接收到客户端请求为:[" + str + "]");
        String respStr = "你好 ,当前时间为:" + new Date();
        System.out.println("服务端-3-:返回客户端信息:[" + respStr + "]");
        return respStr;
    }
}



 

客户端搭建

工程截图:

dubbo 案例 dubbo简单实例_大数据_10

pom.xml



1 <project xmlns="http://maven.apache.org/POM/4.0.0" 
  2     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
  4     http://maven.apache.org/maven-v4_0_0.xsd">
  5 
  6     <modelVersion>4.0.0</modelVersion>
  7     <groupId>ClientMaven</groupId>
  8     <artifactId>Client</artifactId>
  9     <version>0.0.1-SNAPSHOT</version>
 10     <name>dubboClient</name>
 11     <url>http://maven.apache.org</url>
 12 
 13     <properties>
 14         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 15         <spring.version>3.2.13.RELEASE</spring.version>
 16         <slf4j.version>1.6.6</slf4j.version>
 17     </properties>
 18 
 19     <dependencies>
 20         <dependency>
 21             <groupId>junit</groupId>
 22             <artifactId>junit</artifactId>
 23             <version>3.8.1</version>
 24             <scope>test</scope>
 25         </dependency>
 26         <!-- Spring -->
 27         <dependency>
 28             <groupId>org.springframework</groupId>
 29             <artifactId>spring-aop</artifactId>
 30             <version>${spring.version}</version>
 31         </dependency>
 32         <dependency>
 33             <groupId>org.springframework</groupId>
 34             <artifactId>spring-core</artifactId>
 35             <version>${spring.version}</version>
 36         </dependency>
 37         <dependency>
 38             <groupId>org.springframework</groupId>
 39             <artifactId>spring-beans</artifactId>
 40             <version>${spring.version}</version>
 41         </dependency>
 42         <dependency>
 43             <groupId>org.springframework</groupId>
 44             <artifactId>spring-context</artifactId>
 45             <version>${spring.version}</version>
 46         </dependency>
 47         <dependency>
 48             <groupId>org.springframework</groupId>
 49             <artifactId>spring-expression</artifactId>
 50             <version>${spring.version}</version>
 51         </dependency>
 52         <!-- spring end -->
 53         <!-- log -->
 54         <dependency>
 55             <groupId>log4j</groupId>
 56             <artifactId>log4j</artifactId>
 57             <version>1.2.16</version>
 58         </dependency>
 59         <dependency>
 60             <groupId>org.slf4j</groupId>
 61             <artifactId>slf4j-api</artifactId>
 62             <version>${slf4j.version}</version>
 63         </dependency>
 64         <dependency>
 65             <groupId>org.slf4j</groupId>
 66             <artifactId>slf4j-log4j12</artifactId>
 67             <version>${slf4j.version}</version>
 68         </dependency>
 69         <!-- dubbo -->
 70         <dependency>
 71             <groupId>com.alibaba</groupId>
 72             <artifactId>dubbo</artifactId>
 73             <version>2.5.3</version>
 74         </dependency>
 75         <!-- zkclient -->
 76         <dependency>
 77             <groupId>com.github.sgroschupf</groupId>
 78             <artifactId>zkclient</artifactId>
 79             <version>0.1</version>
 80         </dependency>
 81         <!-- zookeeper -->
 82         <dependency>
 83             <groupId>org.apache.zookeeper</groupId>
 84             <artifactId>zookeeper</artifactId>
 85             <version>3.4.5</version>
 86         </dependency>
 87     </dependencies>
 88 
 89     <build>
 90         <finalName>dubbo-demo</finalName>
 91         <plugins>
 92             <plugin>
 93                 <groupId>org.apache.maven.plugins</groupId>
 94                 <artifactId>maven-compiler-plugin</artifactId>
 95                 <version>2.1</version>
 96                 <configuration>
 97                     <source>1.5</source>
 98                     <target>1.5</target>
 99                     <encoding>UTF-8</encoding>
100                     <failOnError>false</failOnError>
101                 </configuration>
102             </plugin>
103         </plugins>
104     </build>
105 </project>
106



该pom.xml和服务端的依赖基本一致

ClientMain.java



package com.mor.client.dubbo.main;

import com.mor.client.dubbo.action.ChatAction;

public class ClientMain {
    public static void main(String[] args) {
        ChatAction act = new ChatAction();
        act.SayHello();
    }
}



ChatAction.java



package com.mor.client.dubbo.action;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mor.server.dubbo.service.DemoServer;

public class ChatAction {
    public void SayHello() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationConsumer.xml" });
        context.start();
        DemoServer demoServer = (DemoServer) context.getBean("demoService");
        String reqStr = "我是客户端参数:[当前时间是多少?]";
        System.out.println("客户端-1-:开始发起请求,请求参数为:" + reqStr);
        System.out.println("客户端-4-:接收到服务端信息为["
                + demoServer.sayHello(reqStr) 
                + "]");
    }
}



applicationConsumer.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" />
    <!-- 使用本地伪集群注册中心暴露发现服务地址 -->  
    <dubbo:registry  protocol="zookeeper" address="192.168.10.171:2181" />         
    <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->  
    <dubbo:reference id="demoService" interface="com.mor.server.dubbo.service.DemoServer" />  
</beans>



由于客户端需要调用服务端,所以可以采取工程依赖和jar包依赖两种

工程依赖:

在myeclipse里面,右击Client-->Build path-->Configure build path

dubbo 案例 dubbo简单实例_大数据_11

然后选择Projects,选择服务端

dubbo 案例 dubbo简单实例_java_12

或者把服务端打成jar包,然后客户端直接引用。

至此,全部过程就搭建完毕,运行的时候依次启动:

1.zookeeper

2.服务端

3.客户端

即可得到最开始结果。

 

几个注意的问题:

如果applicationProvider.xml的dubbo标签打红叉,可以自行百度myeclipse的xsd的引用

可参见:http://vickya.iteye.com/blog/1113277

注意xml配置文件中的ip和端口


加油学习~!