`

Dubbo入门实例

阅读更多

原文地址:http://www.hxstrive.com/article/605.htm

 

下面是本文将介绍实例在IDEA开发环境的项目结构,该项目使用MAVEN进行编译打包和依赖管理。如下图:

上图中,dubbo-hello程序有3个子模块,分别为 dubbo-api(定义我们的服务接口)、dubbo-provider(服务接口的具体实现,也是我们要暴露出去的服务)和dubbo-consumer(服务消费者)。下面将分别对他们进行详细讲解。

注意:该实例是基于Zookeeper搭建,将Zookeeper作为Dubbo的注册中心。(如果不知道怎样安装Zookeeper,请查看《Zookeeper Windows单机安装》)

dubbo-api
该模块是一个非常简单的maven项目,其中只有一个接口 HelloService.java。如下图:
HelloService.java代码如下:
package com.huangx.dubbo.hello;
 
/**
 * 定义SOA服务的接口
 */
public interface HelloService {
 
   /**
    * 接口方法
    * @param name
    * @return
    */
   String sayHello(String name);
 
}


dubbo-provider
该模块是一个非常简单的maven项目,该模块依赖了dubbo-api模块。该模块的接口如下图:

其中:
HelloServiceImpl 实现了HelloService接口
Provider 为启动类
dubbo.properties
dubbo-demo-provider.xml dubbo的spring配置文件
log4j.properties 日志配置文件

HelloServiceImpl.java代码
package com.huangx.dubbo.provider;
 
import com.huangx.dubbo.hello.HelloService;
import com.alibaba.dubbo.rpc.RpcContext;
import java.text.SimpleDateFormat;
import java.util.Date;
 
/**
 * 服务实现
 */
public class HelloServiceImpl implements HelloService {
 
   public String sayHello(String name) {
      SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
      System.out.println("[" + sdf.format(new Date()) + "] Hello " + name
            + ", request from consumer: "
            + RpcContext.getContext().getRemoteAddress());
 
      return "Hello " + name + ", response from provider: "
            + RpcContext.getContext().getLocalAddress();
   }
 
}


Provider.java代码
package com.huangx.dubbo.provider;
 
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
/**
 * 加载 Spring 的配置文件,启动 Dubbo 服务提供者
 */
public class Provider {
 
   public static void main(String[] args) throws Exception {
      // 防止获取IPV6地址,这种方式只工作在debug模式下。
      // 但是,你能通过 -Djava.net.preferIPv4Stack=true。
      // 那么,debug或不是debug模式都能很好的工作。
      System.setProperty("java.net.preferIPv4Stack", "true");
 
      // 加载 Spring 配置文件,启动 Dubbo
      ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            new String[] {"dubbo-demo-provider.xml"});
      context.start();
 
      // 按任意键退出
      System.in.read();
      context.close();
   }
}


dubbo.properties配置
dubbo.application.qos.port=22222

dubbo-demo-provider.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
      xmlns="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
         http://code.alibabatech.com/schema/dubbo
         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 
   <!-- 提供应用名称,用于计算依赖关系 -->
   <dubbo:application name="demo-provider"/>
 
   <!-- 使用多播注册中心导出服务 -->
   <!--<dubbo:registry address="multicast://224.0.0.100:1234"/>-->
   <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
 
   <!-- 使用 dubbo 协议在 20880 端口导出服务 -->
   <dubbo:protocol name="dubbo" port="20880"/>
 
   <!-- 服务实现,与常规本地bean相同 -->
   <bean id="demoService" class="com.huangx.dubbo.provider.HelloServiceImpl"/>
 
   <!-- 声明要导出的服务接口 -->
   <dubbo:service interface="com.huangx.dubbo.hello.HelloService" ref="demoService"/>
</beans>


log4j.properties配置
###set log levels###
log4j.rootLogger=info, stdout
 
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n


dubbo-consumer
该模块是一个非常简单的maven项目,该模块依赖了dubbo-api模块。其中:
Consumer.java 为消费者
dubbo.properties
dubbo-demo-provider.xml dubbo的spring配置文件
log4j.properties 日志配置文件

Consumer.java代码
package com.huangx.dubbo.consumer;
 
import com.huangx.dubbo.hello.HelloService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
/**
 * 加载 Spring 配置,启动 Dubbo 服务消费者
 */
public class Consumer {
 
   public static void main(String[] args) {
      System.setProperty("java.net.preferIPv4Stack", "true");
      ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
            new String[] { "dubbo-demo-consumer.xml" });
      context.start();
 
      // 获取远程服务
      HelloService demoService = (HelloService) context.getBean("demoService");
      while (true) {
         try {
            Thread.sleep(1000);
            // 调用远程方法
            String hello = demoService.sayHello("word");
            // 获取结果
            System.out.println(hello);
         } catch (Throwable throwable) {
            throwable.printStackTrace();
         }
      }
   }
 
}


dubbo.properties配置
dubbo.application.qos.port=33333

dubbo-demo-consumer.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
      xmlns="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
         http://code.alibabatech.com/schema/dubbo
         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 
   <!-- 使用者的应用程序名称,用于计算应用间的依赖关系(不是匹配标准),
      不要设置与提供者相同的设置 -->
   <dubbo:application name="demo-consumer"/>
 
   <!-- 使用多播注册中心发现服务 -->
   <!--<dubbo:registry address="multicast://224.0.0.100:1234"/>-->
   <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
 
   <!-- 生成远程服务的代理,然后可以像使用本地接口一样去使用demoService服务 -->
   <dubbo:reference id="demoService" check="false"
                interface="com.huangx.dubbo.hello.HelloService"/>
</beans>

log4j.properties配置
###set log levels###
log4j.rootLogger=info, stdout
 
###output to console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n

 

 

 

分享到:
评论

相关推荐

    Dubbo入门实例Demo

    【Dubbo入门实例Demo】是针对初学者设计的一个实践教程,旨在帮助新手快速理解并掌握Apache Dubbo这一高性能、轻量级的Java RPC框架。在学习过程中,新手往往会在配置、依赖、通信等方面遇到诸多问题,这个Demo就是...

    dubbo入门实例源码

    dubbo入门实例源码,直接解压后,分别将dubboprovider和dubboconsumer项目导入myeclipse中,先启动zookeeper注册中心(bin\zkServer.cmd或zkServer.sh),再启动provider中main…………

    dubbo入门实例

    【Dubbo入门实例详解】 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务框架,它致力于提供一个简单、高效、可扩展的分布式服务解决方案。在本入门实例中,我们将通过两个核心组件——`dubboserver`(服务提供...

    dubbo入门实例及性能测试

    1. **Dubbo入门** - **安装配置**:首先,你需要安装Java环境,并在项目中引入Dubbo依赖。通常,Dubbo项目基于Maven构建,因此你需要在`pom.xml`文件中添加Dubbo的依赖。 - **服务接口定义**:创建服务接口(API)...

    Dubbo+zookeeper 入门简单实例

    【描述】"Dubbo入门实例Demo"暗示我们将通过一个简单的示例来了解如何在实际项目中使用Dubbo。这个Demo通常会包括创建服务提供者(Provider)和服务消费者(Consumer),并利用Zookeeper作为服务中心进行连接。 **...

    dubbo入门教程+实例源码

    【Dubbo入门教程+实例源码】是一份针对初学者设计的教程,旨在帮助开发者快速理解和掌握Apache Dubbo这一高性能、轻量级的服务治理框架。Dubbo是阿里巴巴开源的一个分布式服务框架,它提供了服务注册与发现、负载...

    dubbo的实例demo

    总的来说,这个实例将帮助你快速入门Dubbo和Zookeeper的集成使用,为你的分布式系统开发打下坚实的基础。在实践过程中,记得多思考每个组件的作用和它们之间的交互,这样可以更好地理解和掌握分布式服务的精髓。

    Dubbo新手入门实例HelloWorld(zookeeper)源码

    【Dubbo新手入门实例HelloWorld(zookeeper)源码】是一个非常适合初学者的教程,它将带你深入了解如何在实际项目中使用Dubbo框架,并结合Zookeeper作为注册中心进行服务治理。Dubbo是阿里巴巴开源的一个高性能、轻量...

    dubbo源码实例

    这个实例旨在帮助初学者快速入门,理解Dubbo的核心概念和工作原理,通过源码分析深入掌握其内部机制。 一、Dubbo架构概览 Dubbo的核心组件包括服务提供者(Provider)、服务消费者(Consumer)、注册中心...

    dubbo入门例子

    【标题】"dubbo入门例子"提供了一个适合初学者了解和学习Dubbo的简单实践,这个实例通过Spring框架进行配置,旨在帮助新手快速上手分布式服务框架的基本操作。Dubbo是一个高性能、轻量级的开源Java RPC框架,由阿里...

    dubbo+zookeeper入门实例

    【标题】"dubbo+zookeeper入门实例"是一个关于使用Dubbo框架与Zookeeper结合实现服务发现和服务调用的基础教程。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java分布式服务框架,而Zookeeper则是一个分布式服务协调...

    dubbo入门例子程序

    【Dubbo入门例子程序】是针对初学者设计的一个简单示例,旨在帮助理解并快速上手Apache Dubbo这一高性能、轻量级的Java远程服务框架。这个例子通过一个"Hello, World!"的应用来演示Dubbo的基本用法,采用Maven作为...

    dubbo-hellowrold实例

    dubbo入门实例,包含一个provider的maven工程和一个comsumer的maven工程,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/48009645

    Dubbo+Zookeeper入门实例

    【Dubbo+Zookeeper入门实例】深入解析 Dubbo是一个由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它的主要目标是为开发者提供一套简单易用的微服务治理方案。Dubbo的核心功能包括服务注册与发现、服务调用...

    Dubbo新手入门实例HelloWorld(zookeeper)源码低分版

    Dubbo新手入门实例“HelloWorld”是初学者学习分布式服务框架Dubbo的典型起点。这个实例结合了Zookeeper作为注册中心,帮助理解Dubbo的基本工作原理。以下将详细讲解涉及的知识点。 首先,Dubbo是一个高性能、轻量...

Global site tag (gtag.js) - Google Analytics