Dubbo最简单的实例

时间:2022-05-04 05:25:39

用最简单的组播方式来编写dubbo小例子

分别新建两个maven webapp项目,一个是服务器端的,一个是客户端的。

 

服务器端这边项目的结构如下图:

Dubbo最简单的实例

先给pom添加依赖jar

pom.xml内容如下:

<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>dubbo_server</groupId>
  <artifactId>dubbo_server</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>dubbo_server Maven Webapp</name>
  <url>http://maven.apache.org</url>


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

      <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
          <version>1.1.1</version>
      </dependency>
      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>dubbo</artifactId>
          <version>2.5.3</version>
      </dependency>
      <dependency>
          <groupId>org.javassist</groupId>
          <artifactId>javassist</artifactId>
          <version>3.18.1-GA</version>
      </dependency>
      <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.15</version>
          <exclusions>
              <exclusion>
                  <groupId>com.sun.jdmk</groupId>
                  <artifactId>jmxtools</artifactId>
              </exclusion>
              <exclusion>
                  <groupId>com.sun.jmx</groupId>
                  <artifactId>jmxri</artifactId>
              </exclusion>
              <exclusion>
                  <artifactId>jms</artifactId>
                  <groupId>javax.jms</groupId>
              </exclusion>
              <exclusion>
                  <artifactId>mail</artifactId>
                  <groupId>javax.mail</groupId>
              </exclusion>
          </exclusions>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring</artifactId>
          <version>2.5.6.SEC03</version>
      </dependency>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.6</version>
      </dependency>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.6.1</version>
      </dependency>
      <dependency>
          <groupId>org.apache.zookeeper</groupId>
          <artifactId>zookeeper</artifactId>
          <version>3.4.5</version>
          <type>pom</type>
      </dependency>
      <dependency>
          <groupId>com.101tec</groupId>
          <artifactId>zkclient</artifactId>
          <version>0.4</version>
      </dependency>

  </dependencies>
  <build>
    <finalName>dubbo_server</finalName>
  </build>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>


</project>

编写一个接口和一个实现类

package com.lhx.service;

/**
 * Created by Lhx on 14-11-19.
 */
public interface SayHelloToClient {

    public String sayHello(String hello);
}

实现类:

package com.lhx.service.impl;

import com.lhx.service.SayHelloToClient;

/**
 * Created by Lhx on 14-11-19.
 */
public class SayHelloToClientImpl implements SayHelloToClient{

    public String sayHello(String hello){
        System.out.println("我接收到了:" + hello);
        return hello + "你也好啊!!!" ;
    }

}

配置文件applicationProvider.xml

在里面配置bean,内容如下:

<?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" />

    <!-- 注册地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />

    <!-- 接口的位置 -->
    <dubbo:service interface="com.lhx.service.SayHelloToClient"
                   ref="demoService" executes="10" />


    <!-- 实现bean,客户端应用的bean就以这个id名称为主 -->
    <bean id="demoService" class="com.lhx.service.impl.SayHelloToClientImpl" />

</beans>

编写主函数,启动服务用:

package com.lhx.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by Lhx on 14-11-19.
 */
public class MyMain {

    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationProvider.xml" });

        context.start();
        System.out.println("按任意键退出");
        System.in.read();

    }
}


服务器端算是完成了,现在来编写客户端程序

客户端这边的目录结构如下:

Dubbo最简单的实例

pom.xml里面的内容和服务器端类似

<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>dubbo_client</groupId>
  <artifactId>dubbo_client</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>dubbo_client Maven Webapp</name>
  <url>http://maven.apache.org</url>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.18.1-GA</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>jms</artifactId>
                    <groupId>javax.jms</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>mail</artifactId>
                    <groupId>javax.mail</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>2.5.6.SEC03</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.github.adyliu</groupId>
            <artifactId>zkclient</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.5</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>dubbo_server</groupId>
            <artifactId>dubbo_server</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>



  <build>
    <finalName>dubbo_client</finalName>
  </build>
</project>

以下的这个有点不同,从服务器端那里的pom.xml里面寻找内容

<dependency>
            <groupId>dubbo_server</groupId>
            <artifactId>dubbo_server</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

编写客户端调用程序

package com.lhx.client;

import com.lhx.service.SayHelloToClient;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by Lhx on 14-11-19.
 */
public class MyClient {
    public void sayHello(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationConsumer.xml" });

        context.start();

        //获取服务器那边的bean
        SayHelloToClient demoService = (SayHelloToClient) context.getBean("demoService");

        System.out.println(demoService.sayHello("lisi"));
    }
}

编写客户端主函数

package com.lhx.test;

import com.lhx.client.MyClient;

/**
 * Created by Lhx on 14-11-19.
 */

public class AppTest{
    public static void main(String[] args) {
        MyClient myClient = new MyClient();
        myClient.sayHello();
    }
}

最后配置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
        ">

    <!-- consumer application name -->
    <dubbo:application name="consumer-of-helloworld-app" />

    <!-- registry address, used for consumer to discover services -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />
    <dubbo:consumer timeout="5000" />
    <!-- which service to consume? -->
    <dubbo:reference id="demoService" interface="com.lhx.service.SayHelloToClient"/>
</beans>

先启动服务器端的主函数

再启动客户端的主函数

 

服务器端这边收到了参数,知道要调用那个类中的方法。有如下显示:

Dubbo最简单的实例

服务器这边处理完了程序,客户端这边就收到了服务器端发来的处理结果。这有点像WebService了。

Dubbo最简单的实例