dubbo小教程

dubbo小教程

先给出阿里巴巴dubbo的主页:http://code.alibabatech.com/wiki/display/dubbo/Home-zh

自己的demo下载地址:http://download.csdn.net/detail/u012049463/6763315

1. Dubbo是什么?

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架
其核心部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

2. Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。      
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

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

3. dubbo的架构

dubbo架构图如下所示:

节点角色说明:

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

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

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

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

Container: 服务运行容器。

调用关系说明:

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

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

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

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

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

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

4. dubbo使用方法。

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。如果不想使用Spring配置,而希望通过API的方式进行调用(不推荐),可以参见:

http://code.alibabatech.com/wiki/display/dubbo/User+Guide-zh#UserGuide-zh-API%E9%85%8D%E7%BD%AE

下面我们就来看看spring配置方式的写法。

服务提供者:

1. 下载zookeeper注册中心,下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/  下载后解压即可,进入D:\apach-zookeeper-3.4.5\bin,

双击zkServer.cmd启动注册中心服务。

2. 定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)

[html] view plaincopy

  1. package com.unj.dubbotest.provider;
  2. import java.util.List;
  3. public interface DemoService {
  4. String sayHello(String name);
  5. public List getUsers();
  6. }

在服务提供方实现接口:(对服务消费方隐藏实现)

[html] view plaincopy

  1. package com.unj.dubbotest.provider;
  2. import java.util.ArrayList;
  3. import java.util.LinkedList;
  4. import java.util.List;
  5. public class DemoServiceImpl implements DemoService{
  6. public String sayHello(String name) {
  7. return "Hello " + name;
  8. }
  9. public List getUsers() {
  10. List list = new ArrayList();
  11. User u1 = new User();
  12. u1.setName("jack");
  13. u1.setAge(20);
  14. u1.setSex("男");
  15. User u2 = new User();
  16. u2.setName("tom");
  17. u2.setAge(21);
  18. u2.setSex("女");
  19. User u3 = new User();
  20. u3.setName("rose");
  21. u3.setAge(19);
  22. u3.setSex("女");
  23. list.add(u1);
  24. list.add(u2);
  25. list.add(u3);
  26. return list;
  27. }
  28. }

用Spring配置声明暴露服务:

[html] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  9. ">
  10. <!-- 具体的实现bean -->
  11. <bean id="demoService" class="com.unj.dubbotest.provider.DemoServiceImpl" />
  12. <!-- 提供方应用信息,用于计算依赖关系 -->
  13. <dubbo:application name="xixi_provider"  />
  14. <!-- 使用multicast广播注册中心暴露服务地址
  15. <dubbo:registry address="multicast://224.5.6.7:1234" />-->
  16. <!-- 使用zookeeper注册中心暴露服务地址 -->
  17. <dubbo:registry address="zookeeper://127.0.0.1:2181" />
  18. <!-- 用dubbo协议在20880端口暴露服务 -->
  19. <dubbo:protocol name="dubbo" port="20880" />
  20. <!-- 声明需要暴露的服务接口 -->
  21. <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" />
  22. </beans>

加载Spring配置,启动服务:

[html] view plaincopy

  1. package com.unj.dubbotest.provider;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Provider {
  4. public static void main(String[] args) throws Exception {
  5. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
  6. context.start();
  7. System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
  8. }
  9. }

服务消费者:

1.通过Spring配置引用远程服务:

[html] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://code.alibabatech.com/schema/dubbo
  7. http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  8. ">
  9. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  10. <dubbo:application name="hehe_consumer" />
  11. <!-- 使用zookeeper注册中心暴露服务地址 -->
  12. <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
  13. <dubbo:registry address="zookeeper://127.0.0.1:2181" />
  14. <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->
  15. <dubbo:reference id="demoService"
  16. interface="com.unj.dubbotest.provider.DemoService" />
  17. </beans>

2.加载Spring配置,并调用远程服务:

[html] view plaincopy

  1. package com.alibaba.dubbo.demo.pp;
  2. import java.util.List;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import com.unj.dubbotest.provider.DemoService;
  5. public class Consumer {
  6. public static void main(String[] args) throws Exception {
  7. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  8. new String[] { "applicationContext.xml" });
  9. context.start();
  10. DemoService demoService = (DemoService) context.getBean("demoService"); //
  11. String hello = demoService.sayHello("tom"); // ?
  12. System.out.println(hello); //
  13. //
  14. List list = demoService.getUsers();
  15. if (list != null && list.size() > 0) {
  16. for (int i = 0; i < list.size(); i++) {
  17. System.out.println(list.get(i));
  18. }
  19. }
  20. // System.out.println(demoService.hehe());
  21. System.in.read();
  22. }
  23. }

调用结果为:

dubbo管理页面:

应用页面:

提供者页面:

消费者页面:

服务页面:

时间: 2024-12-15 06:56:51

dubbo小教程的相关文章

为帝国cms模板添加站内搜索小教程

由于客户的需要,最近都在整帝国cms,很多东西还是不熟悉,特别是帝国cms模板,以前用的那些网站模板一般是保存在ftp文件中,而帝国cms模板是直接保存在数据库中,修改是在网站后台的模板管理,得慢慢适应. 这几天接到一个站,整体是做得差不多了,就是有很多细节还没解决,例如帝国cms站内搜索还不能实现.本着好奇的新鲜,就随着xmyanke一起来鼓捣一下吧. 在本帝国cms模板修改案例中,站内搜索是放在网站头部右上角,那么我们就在后台-模板-公共模板变量-管理模板变量-页面头部[!--temp.he

入门的小教程!

下面是记录打开文件的一个小教程. 首先从cmd 打开文件进入文件夹 比如进入F\文件\某个程序 第一输入F:回车键cd 文件.....最后找到文件打开python 某个程序     下面是将近一个钟头学会的.`(*∩_∩*)′

中兴新支点操作系统——菜单小教程

之前一直在安利中兴新支点的操作系统,于是今天就来给大家做个关于操作系统的小教程吧- 今天的主要内容是围绕着他的菜单这个板块. 与Windows的一样,中兴新支点的操作系统也是单击左下角以显示菜单,这个菜单分四个部分,左侧为菜单栏,中间为软件分类,右侧为已安装软件列表,下方为搜索栏 .而在菜单右侧选项当中,右键则能弹出对该程序的更多操作菜单,例如可以把程序添加到桌面或者添加到面板. 在菜单栏上右键后能选择编辑菜单,在这里可以对菜单进行进一步更加详细的编辑. 同时我还发现,如果是不被允许或者无法进行

dubbo 入门教程 基于zookeeper

从上午发布的安装zookeeper 遇到的第一个错误开始 一直在搞dubbo 中午吃了饭 睡了会觉 .中间错误一个又一个 慢慢的都解决了.小有成就,哈哈.算这个星期天没有白费吧. 学习的过程值得留恋.分享一下吧 只是之前听网友提过dubbo这个东西 一直都没有百度和使用过.前天答应老板 我们框架中留一个口出来 给dubbo .今天天气热 就在宿舍研究吧. 首先是百度 知道是做什么的 后来就开始找教程 但是大家都知道 百度的教程 基本都是一个模板.看了大概有20篇 基本就换换字 代码 都是一样的.

icon小教程之图标细节的绘制

今天通过一个简单的game图标的绘制教程,和大家分享在绘制过程中细节的处理和一些画图标的心得,好的,我们开始吧! Step1 首先要定好图标的透视,这是非常重要的,这关系到图标的整体美感,透视本身也可以很好的表现图标的细节,为了透视的真实,可以通过3D软件或者平面软件中的一些的透视功能来实现.整体框架搭好,开始接下来的绘制. Step2 先大致的铺上一层"控制板"的颜色,这里需要注意一些基本的光影渐变,以及边缘的处理. Step3 这一步我们将通过一些光影效果来刻画"控制板&

jQuery小教程

不废话,先说明我们的目的.我们知道,当代浏览器(modern browsers)的文本框的聚焦(focus)样式可以通过CSS的伪类:focus来设置.假设我们有这么一段代码: Name: Password:www.mlybyby.com Textarea: 则我们这样的CSS就可以搞定focus样式: input[type="text"]:focus, input[type="password"]:focus, textarea:focus { border: 1

dubbo入门和springboot集成dubbo小例子

从零开始搭建springboot-dubbo的例子 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案 一. Dubbo的简单介绍 1. 网站架构的发展历程 网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多....... 单一应用架构(OORM) 当网站流量很小时,将所有的功能部署到一起,以减少部署节点和成本.此时,只需要使用简化增删改查的工作量,采用数据访问框架(ORM). 垂直应用架构 (MVC) 当访问量逐

zblog asp完美升级转到php版本小教程

根据目前zblog的走势来说,今后的zblogPHP版本将会成为主流,所以现在很多新博主站长建站的时候都会选择zblogPHP版本,而不是zblogASP版本.今天,我们重点跟大家分享一下如何将zblog asp完美转到php版本? zblog asp转php环境 zblog asp2.2运行在WIN7系统IIS7.5: zblog php1.4运行在WIN7系统WampServer. zblog asp转php所需的插件 修复了标签导出的"Z-BlogPHP转换工具(修复版)"插件:

Dubbo应用教程--ActiveMQ的安装与使用(单节点)

  IP:192.168.4.101    环境:CentOS 6.6.JDK7 1.  安装JDK并配置环境变量(略) JAVA_HOME=/usr/local/java/jdk1.7.0_72 2.  下载Linux版的ActiveMQ(当前最新版apache-activemq-5.11.1-bin.tar.gz) $ wgethttp://apache.fayea.com/activemq/5.11.1/apache-activemq-5.11.1-bin.tar.gz 3.  解压安装