原文地址: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】是针对初学者设计的一个实践教程,旨在帮助新手快速理解并掌握Apache Dubbo这一高性能、轻量级的Java RPC框架。在学习过程中,新手往往会在配置、依赖、通信等方面遇到诸多问题,这个Demo就是...
dubbo入门实例源码,直接解压后,分别将dubboprovider和dubboconsumer项目导入myeclipse中,先启动zookeeper注册中心(bin\zkServer.cmd或zkServer.sh),再启动provider中main…………
【Dubbo入门实例详解】 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务框架,它致力于提供一个简单、高效、可扩展的分布式服务解决方案。在本入门实例中,我们将通过两个核心组件——`dubboserver`(服务提供...
1. **Dubbo入门** - **安装配置**:首先,你需要安装Java环境,并在项目中引入Dubbo依赖。通常,Dubbo项目基于Maven构建,因此你需要在`pom.xml`文件中添加Dubbo的依赖。 - **服务接口定义**:创建服务接口(API)...
【描述】"Dubbo入门实例Demo"暗示我们将通过一个简单的示例来了解如何在实际项目中使用Dubbo。这个Demo通常会包括创建服务提供者(Provider)和服务消费者(Consumer),并利用Zookeeper作为服务中心进行连接。 **...
【Dubbo入门教程+实例源码】是一份针对初学者设计的教程,旨在帮助开发者快速理解和掌握Apache Dubbo这一高性能、轻量级的服务治理框架。Dubbo是阿里巴巴开源的一个分布式服务框架,它提供了服务注册与发现、负载...
总的来说,这个实例将帮助你快速入门Dubbo和Zookeeper的集成使用,为你的分布式系统开发打下坚实的基础。在实践过程中,记得多思考每个组件的作用和它们之间的交互,这样可以更好地理解和掌握分布式服务的精髓。
【Dubbo新手入门实例HelloWorld(zookeeper)源码】是一个非常适合初学者的教程,它将带你深入了解如何在实际项目中使用Dubbo框架,并结合Zookeeper作为注册中心进行服务治理。Dubbo是阿里巴巴开源的一个高性能、轻量...
这个实例旨在帮助初学者快速入门,理解Dubbo的核心概念和工作原理,通过源码分析深入掌握其内部机制。 一、Dubbo架构概览 Dubbo的核心组件包括服务提供者(Provider)、服务消费者(Consumer)、注册中心...
【标题】"dubbo入门例子"提供了一个适合初学者了解和学习Dubbo的简单实践,这个实例通过Spring框架进行配置,旨在帮助新手快速上手分布式服务框架的基本操作。Dubbo是一个高性能、轻量级的开源Java RPC框架,由阿里...
【标题】"dubbo+zookeeper入门实例"是一个关于使用Dubbo框架与Zookeeper结合实现服务发现和服务调用的基础教程。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java分布式服务框架,而Zookeeper则是一个分布式服务协调...
【Dubbo入门例子程序】是针对初学者设计的一个简单示例,旨在帮助理解并快速上手Apache Dubbo这一高性能、轻量级的Java远程服务框架。这个例子通过一个"Hello, World!"的应用来演示Dubbo的基本用法,采用Maven作为...
dubbo入门实例,包含一个provider的maven工程和一个comsumer的maven工程,具体效果和过程看博文http://blog.csdn.net/evankaka/article/details/48009645
【Dubbo+Zookeeper入门实例】深入解析 Dubbo是一个由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它的主要目标是为开发者提供一套简单易用的微服务治理方案。Dubbo的核心功能包括服务注册与发现、服务调用...
Dubbo新手入门实例“HelloWorld”是初学者学习分布式服务框架Dubbo的典型起点。这个实例结合了Zookeeper作为注册中心,帮助理解Dubbo的基本工作原理。以下将详细讲解涉及的知识点。 首先,Dubbo是一个高性能、轻量...