文档章节

基于开源Dubbo分布式RPC服务框架的部署整合

hanfeng
 hanfeng
发布于 2015/11/03 15:18
字数 1241
阅读 1213
收藏 17

详细介绍请参照官方地址:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm,不再重复描述,本文主要记录了详细的开发整合步骤。

一、源码构建

这个网上很多教程,大家可以google/baidu,或者直接下载我已经构建好的。我做了更改,兼容JDK1.8.

网盘下载 http://pan.baidu.com/s/1sjFqt8T 密码:60u7

二、Zookeeper部署(Registry 服务注册中心)

    Dubbo 缺省配置通过 multicast 注册中心广播实现 Provider 和 Consumer 之间的简单远程过程调用(Simple RPC),不需要通过 Registry 注册中心进行注册调度,类似于spring rmi remoting调用,但由于不是Cluster部署,所以作为分布式RPC框架官方建议使用 Zookeeper 作为Registry注册中心服务器(同样支持Redis)实现服务的注册、发现、路由功能。

    Dubbo在Zookeeper服务器端只增加了dubbo数据节点(如下图),无需其他任何配置,所以只需安装或使用现有 Zookeeper 服务器即可,关于Zookeeper的安装部署可以参照之前的博文:http://my.oschina.net/ihanfeng/blog/525255

三、服务提供方(Provider)

1、创建基于maven管理的dubbo-provider项目。

<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.hanfeng.dubbo</groupId>
	<artifactId>dubbo-provider</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>dubbo-provider Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.0.8.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.6</version>
			<exclusions>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>

		<dependency>
			<groupId>com.netflix.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>1.1.16</version>
		</dependency>
	</dependencies>

	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.4</version>
				<configuration>
					<warSourceDirectory>WebRoot</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

2、创建测试服务接口(HelloService)

package com.hanfeng.dubbo.provider;

public interface HelloService {
	public String sayHello(String text);
}

3、创建服务接口实现类(HelloServiceImpl)

package com.hanfeng.dubbo.provider.impl;

import com.alibaba.dubbo.rpc.RpcContext;
import com.hanfeng.dubbo.provider.HelloService;

public class HelloServiceImpl implements HelloService{

	@Override
	public String sayHello(String text) {
		return "hello "+ text + "/n response form provider: " + RpcContext.getContext().getLocalAddress();
	}

}

4、通过spring 集成并配置dubbo测试服务,同时指定registry的zookeeper服务器地址。

<?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 服务提供者应用名称 -->
    <dubbo:application name="dubbo-provider" />

    <!--dubbo 注册中心-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!--服务提供者 端口-->
    <dubbo:protocol name="dubbo" port="30001" />

    <!--dubbo提供服务-->
    <dubbo:service interface="com.hanfeng.dubbo.provider.HelloService" ref="helloService" />

    <!--spring bean 对象-->
    <bean id="helloService" class="com.hanfeng.dubbo.provider.impl.HelloServiceImpl" /> 
</beans>

5、编写控制台程序启动spring容器,编译并打包Provider.jar

package com.hanfeng.dubbo.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProviderTest {
	@SuppressWarnings("resource")
	public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-dubbo-provider.xml"});
        context.start();
        System.out.println("请按任意键退出");
        System.in.read(); // 按任意键退出
    }
}

四、服务消费方开发(Consumer)

1、通过spring 配置指定registry的zookeeper地址,实现对dubbo远程服务的调用

<?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="dubbo-consumer" />

    <dubbo:registry address="zookeeper://127.0.0.1:2181" /> 
    
    <!-- 生成远程服务代理,可以和本地bean一样使用helloService -->
   <dubbo:reference  interface="com.hanfeng.dubbo.provider.HelloService" id="helloService" />
</beans>

2、编写调用测试客户端代码,从容器中获取远程bean并调用。

package com.hanfeng.dubbo.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.hanfeng.dubbo.provider.HelloService;

public class ConsumerTest {
	@SuppressWarnings("resource")
	public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring-dubbo-consumer.xml"});
        context.start();
  
        HelloService hellService = (HelloService)context.getBean("helloService"); // 获取远程服务代理
        String res = hellService.sayHello("world"); // 执行远程方法
        System.out.println( res ); // 显示调用结果
    }
}

五、deno测试

首先启动zookeeper服务器,再启动dubbo服务器。

测试开始,我们首先运行ProviderTest,然后运行ConsumerTest

输出结果:

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
hello world/n response form provider: 192.168.5.13:30001

登录 http://127.0.0.1:8080/,我们发现服务数、应用数、提供者都有对应的数据。

源代码:链接:http://pan.baidu.com/s/1sj8AyNb 密码:hwd* (上面案例还需要源代码得话,密码最后一个字母自己尝试)

© 著作权归作者所有

hanfeng
粉丝 21
博文 48
码字总数 36874
作品 0
福州
高级程序员
私信 提问
加载中

评论(1)

L
Lee0605
K
dubbo学习记录(一)dubbo简介

作为阿里开源的项目,dubbo出现也有段时间了,之前接触过一点,但是没细研究,这次抽出时间来具体学习一下。 一、什么是Dubbo? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远...

zq17865815296
2018/01/06
0
0
Dubbo,SpringCloud,EJB对比

引言 最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论微服务框架。近期也看到各大技术社区开始组织一些沙龙和论坛来分享spring cloud的相关实施经验。 目前,S...

rock912
2017/07/05
221
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
2018/12/13
73
0
当当网开源 Dubbox,扩展 Dubbo 服务框架支持REST风格远程调用

当当网近日开源了Dubbox项目,可为Dubbo服务框架提供多项扩展功能,包括REST风格远程调用、Kryo/FST序列化等等。 当当网架构部和技术委员会架构师沈理向InfoQ中文站介绍了Dubbox项目,开发背...

空云万里晴
2014/10/23
20.8K
13
Dubbo将积极适配Spring Cloud生态,Spring Cloud体系或将成为微服务的不二选择!

2016年,我在博客中发表过一篇《微服务架构的基础框架选择:Spring Cloud还是Dubbo?》获得了很大的阅读量和转载量。在这篇文章中,我主要对比了Spring Cloud与Dubbo所具备的能力,并阐述了个...

翟永超
2018/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java注解合并,注解继承

spring中有时候一个类上面标记很多注解。 实际上Java注解可以进行继承(也就是把多个注解合并成1个) 比如说SpringMVC的注解 @RestController@RequestMapping("/person") 可以合并为一个 @P...

物种起源-达尔文
25分钟前
4
0
撤消Git中一个文件的工作副本修改?

在最后一次提交之后,我修改了工作副本中的一堆文件,但是我想撤消对这些文件之一的更改,例如将其重置为与最新提交相同的状态。 但是,我只想撤消仅一个文件的工作副本更改,而没有其他操作...

技术盛宴
今天
4
0
Qt编写气体安全管理系统28-模拟工具

一、前言 模拟工具在一些涉及到硬件通信的程序中特别有用,也特别需要,回顾这十年来做过的项目,95%的项目都是软硬件交互的,貌似软硬件结合的项目更有生命力一些,纯软件的或者纯硬件的,并...

飞扬青云
今天
4
0
关于生活方式

生活就是生活,但难免和工作混在一起,所以要建立自己的生活方式,把工作稍微隔开点。 首先呢,每周放假的两天肯定会: 洗衣服,收拾屋子,列计划是必须要做的事情。 (这里可能还包含一些处...

T型人才追梦者
今天
6
0
JVM

一、JVM一些基本概念 1、JVM和普通虚拟机 JVM:Java Virtual Machine,程序自己独立的运行环境;堆栈、寄存器、字节码指令;可以运行多种语言:Java、Scala、Grovvy; 普通虚拟机:能完整提供...

请把小熊还给我_m
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部