dubbo入门介绍及结合spring搭建(源码放送)

前言

关于dubbo的介绍网上有很多博文有入门级的说明,但在这里,将会提供给大家dubbo的入门介绍,dubbo结合spring项目的简单搭建,以及提供demo源代码的免费下载。

dubbo的官方网址是:http://dubbo.io/

dubbo框架使用的demo源码下载地址:http://download.csdn.net/detail/fighterandknight/9514559

dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架

其核心部分包含:

1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

dubbo的架构

dubbo架构图如下所示:

节点角色说明

Provider: 暴露服务的服务提供方。

Consumer: 调用远程服务的服务消费方。

Registry: 服务注册与发现的注册中心。

Monitor: 统计服务的调用次调和调用时间的监控中心。

Container: 服务运行容器。

调用关系说明

1)服务容器负责启动,加载,运行服务提供者。

2)服务提供者在启动时,向注册中心注册自己提供的服务。

3)服务消费者在启动时,向注册中心订阅自己所需的服务。

4)注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

5)服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

6)服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

spring结合dubbo搭建

dubbo服务端编写

新建接口

package com.znn.provider;

public interface DemoService {
	String sayHello(String name);
}

实现接口

package com.znn.provider;

public class DemoServiceImpl implements DemoService{

	@Override
	public String sayHello(String name) {
		return "Hello Dubbo,Hello " + name;
	}

}

配置Spring启动文件

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        ">
	<import resource="dubbo-provider.xml"></import>
</beans>

配置服务端的dubbo-provider.xml文件

这里面的bean 都是通过添加bean到xml的形式添加到spring容器里面去,在实际开发项目的时候我们可以通过扫描的方式添加到spring容器中

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

    <!-- 使用multicast广播注册中心暴露服务地址 -->
   <!--  <dubbo:registry address="multicast://224.5.6.7:1234" /> -->

 	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<!-- <dubbo:registry address="zookeeper://115.28.189.59:2181" /> -->
	<dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.znn.provider.DemoService" ref="demoService" />

    <!-- 和本地bean一样实现服务 -->
    <bean id="demoService" class="com.znn.provider.DemoServiceImpl" />
</beans>

dubbo客户端编写

spring启动文件配置

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        ">
	<import resource="dubbo-consumer.xml"/>
</beans>

客户端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="consumer-of-helloworld-app"/>
	<!-- 使用multicast广播注册中心暴露发现服务地址 -->
	<!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
	<dubbo:registry address="zookeeper://192.168.1.34:2181" />
	<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
	<dubbo:reference id="demoService" interface="com.znn.provider.DemoService" />
</beans>

编写测试dubbo代码

package com.znn.consumer;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.znn.provider.DemoService;

public class Consumer {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(ClassLoader.getSystemResource("")+"../"+"/dubbo-consumer.xml");
		context.start();
		DemoService demoService = (DemoService)context.getBean("demoService");
	    String hello = demoService.sayHello("world");
	    System.out.println(hello);
	}
}

zookeeper启动

zookeeper我已经上传到csdn,有需要的朋友可以自行下载http://download.csdn.net/detail/fighterandknight/9514500
下载后直接打开bin目录的zkServer.cmd文件直接执行就可以了。

需要替换端口的可以到conf文件目录下面修改zoo.cfg的clientPort的值,具体的更详细的其他配置,请参考官方的文档。

部署dubbo的服务端

配置好了本地的dubbo的服务端的配置文件,就直接把服务部署到tomcat,如果是服务成功启动并且注册成功会zookeeper会出现如下提示:

运行dubbo测试用例

直接执行dubbo的客户端main方法,可以看到以下结果:

总结

dubbo还是用起来还是比较方便的,特别是针对于大型的项目的开发,以及大型项目维护,那么说到运营与维护的话其实还是需要结合dubbo-admin 一起使用的,dubbo-admin究竟是如何配置以及使用的呢,我的下篇博文会为大家提供介绍以及相关的资源下载,请大家敬请期待~

时间: 2024-08-25 05:31:37

dubbo入门介绍及结合spring搭建(源码放送)的相关文章

OpenCV之识别自己的脸——C++源码放送

OpenCV之识别自己的脸--C++源码放送 前言 在将近一年之前,我在CSDN专栏<OpenCV实践之路>中连续发了三篇博客,完整地描述了基于OpenCV进行人脸识别的全过程.三篇都将近一万的阅读量和大量的评论的表明,人脸识别果然是大家在学习OpenCV过程中最感兴趣的课题,之一.当然,也有可能是本科生毕设老师最感兴趣的课题之一... 由于当时写的时候是按照前后流程来的,所以源码比较分散.加之我想当然地认为,很多源码是之前博客中已经放出来的,可以一句带过.这导致了很多同学学习的时候很不方面.

cocos2d-x 3.0游戏实例学习笔记 《跑酷》 完结篇--源码放送

说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程,用cocos2d-x 2.X 版本重写的,目前我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 OK,到昨天为止,我们已经将游戏基本上写完了,这里本来就是别人开源的东西,我这里重写,当然要公布源码.那么这里有两种方式: 第一种:将我运行成功的整个项目打包,VS2012+win7下的,这种方式就比较大,但是可以打开打开 Run/proj.win32/Run.sln 就可以啦 第二种:就是我只打包

分布式 RPC 系统框架 Dubbo入门介绍

Dubbo 概述 Dubbo 产生的背景 随着互联网项目用户量的急剧增长,访问并发量的陡然增加,一个应用中所有的功能都集中于一个项目中,已经完全不能满足需要了,系统性能急需提升.提升性能的最直接的方式是构建集群,构建具有负载均衡功能的集群.但仅仅依靠增加具有相同业务功能的主机来提高系统的性能,能力是有限的.需要将应用的功能进行分解,分解为多个子工程,每个子工程仅完成某一特定功能,例如,登录子工程.订单业务子工程.支付业务子工程.红包业务子工程等.即,将原来项目中的业务模块,变为了独立工程.在这种

(8)分布式下的爬虫Scrapy应该如何做-图片下载(源码放送)

  转载主注明出处:http://www.cnblogs.com/codefish/p/4968260.html 在爬虫中,我们遇到比较多需求就是文件下载以及图片下载,在其它的语言或者框架中,我们可能在经过数据筛选,然后异步的使用文件下载类来达到目的,Scrapy框架中本身已经实现了文件及图片下载的文件,相当的方便,只要几行代码,就可以轻松的搞定下载.下面我将演示如何使用scrapy下载豆瓣的相册首页内容. 优点介绍: 1)自动去重 2)异步操作,不会阻塞 3)可以生成指定尺寸的缩略图 4)计算

一个变态程序的窥私欲:智能语音录制程序——窃听神器(源码放送!)

1. 我这人从小有个坏毛病,就是喜欢偷窥别人隐私.当然,在道德上,我时刻要求自己做一名正人君子,只不过是心理上有这癖好罢了.所以我从小就对窃听.窃视.黑客技术.破解技术等疯狂着迷!实际上这也是我走上程序员之路的一个重要原因! 或许正如弗洛伊德所说的那样,潜意识里面暗藏的原始欲望,是我们一切行为背后的真正动因.就像不可一世的希特勒和他野心勃勃的奋斗一样,归根到底只是因为他是一个自卑的抖S. 2. 今天说的这个事呢还要从两年前说起.那时我还在念大学.说来也巧,咱们宿舍的4个人都有一个共同的毛病——梦

Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如下图所示: 一.对Socket Server的要求 我们可以尝试让Socket Server透明地支持WebSocket客户端,所谓透明的意思是,服务端开发人员不用关心客户端究竟是什么类型,而是可以统一的接收数据.处理数据.发送数据.为了做到这一点,我们可以构建一个服务端框架,让框架完成透明化的工作

Dubbo入门---搭建一个最简单的Demo框架

Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. 缺点:单一的系统架构,使得在开发过程中,占用的资源越来越多,而且随着流量的增加越来越难以维护 垂直应用框架(MVC) 垂直应用架构解决了单一应用架构所面临的扩容问题,流量能够分散到各个子系统当中,且系统的体积可控,一定程度上降低了开发人员之间协同以及维护的成本,提升了开发效率. 缺点:但是在垂直架构

Spring Cloud入门介绍

       Spring Cloud介绍 一.Spring Cloud 是什么 Spring Cloud 为开发者提供了在分布式系统(如配置管理.服务发现.断路器.智能路由.微代理.控制总线.一次性 Token.全局锁.决策竞选.分布式会话和 集群状态)操作的开发工具 Spring Cloud 是一整套微服务的组件.工具集 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.

Spring入门介绍(一)

Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性而诞生的. 目的:解决企业应用开发的复杂性. 功能:使用基本的javaBean代替EJB. 范围:任何的java应用. Spring的起源 Spring的存在是因为他有一系列的得天独厚的优势: 1.它的定位领域是其他frameWork没有的. 2.Spring是全面的和模块化的. 3.它的设计是从底部帮助编写易于测试的代码 4.Spring是潜在的一站式解决方案. Spring的优点 g