Dubbo简单介绍及实例

1、概念


  Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架。其功能主要包含:高性能NIO通讯及多协议集成。服务动态寻址与路由。软负载均衡与容错,依赖分析与降级等。

  说通俗点,就是首先将程序组件化成一个个相对独立的服务,然后就能够对服务进行分布式。并且,它有注冊中心通过监听,实时发现着新服务,并部署。还能够推送给client;它还集成了负载均衡的解决方式。利用随机算法来讲各个服务科学地分配到多台server上;当然,它也集成了容错机制,来提高集群的稳定性。


  



2、架构


  


 节点角色说明:

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

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

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

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

  Ø  Container: 服务执行容器。

 调用关系说明:

  0. 服务容器负责启动。载入,执行服务提供者。

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

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

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

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

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

 注冊中心(Registry)说明:

  对于Dubbo架构中的控制中心及Registry,阿里提供了两种方案:Zookeeper和Redis。生产环境建议大家都使用Zookeeper,推荐理由是:

  1.     Dubbo的官网上写着,使用Dubbo-2.3.3及以上的版本号,推荐使用Zookeeper注冊中心。

  2.     Zookeeper是Apache Hadoop的子项目。强度相对较好。可以全然胜任生产环境的扮演稳定的角色。

  3.     Dubbo未对Zookeeper服务端做不论什么侵入改动。仅仅需安装原生的Zookeeperserver就可以,全部注冊中心逻辑适配都在调用Zookeeperclient完毕。


3、实例


     以下将不贴出来源代码,仅仅对项目结构即部分核心代码进行简单说明。

源代码自行下载,下载地址:点击打开链接

  为了简单起见,这个实例中。我们没有使用Zookeeper注冊中心暴露服务地址,而是使用外网的multicast广播注冊中心暴露服务地址。这样我们能够高速的认识一下Dubbo的作用。

  案例中。我们建立了两个WebProject:dubboprovider和dubboconsumer,前者为服务提供方。后者作为client。我们将dubboprovider服务类的接口引入到dubboconsumer项目中(不能引用服务的实现类)。然后通过multicast广播注冊中心(真实环境用Registry)来远程调用dubboprovider服务的实现,假设能成功调到,就算成功。(项目中applicationContext.xml会报错,是由http://code.alibabatech.com/schema/dubbo/dubbo.xsd引起。说是阿里的相关服务换地方了,只是没关系,能够正常执行)


  


       暴露服务和引用服务的核心配置例如以下。其他代码比較简单,这里不多介绍。直接下载源代码(点击打开链接)看就可以看懂:


  

 

转载于:https://www.cnblogs.com/clnchanpin/p/6852709.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 10.2.0.5升级至11.2.0.4

参照MOS 官方文档Complete Checklist for Manual Upgrade to Oracle Database 11gR2 (11.2) (Doc ID 837570.1)一、升级前的准备1、复制utlu112i.sql脚本从11G数据库复制$ORACLE_HOME/rdbms/admin/utlu112i.sql 脚本至10g 数据库临时目录,准备执行如果不在10g数据库…

脱壳_详细_使用的方法_01

ZC: 如何确定被调试程序已经来到了 未加壳的程序中? ZC:  视频中是使用判断集中语言的特征 ZC:  我的方法:上面的方式 ESP平衡 1、第1课 (1)、单步跟踪(原则:向下的跳转>正常F8,向上的跳转>F4跳过(或者用F2…

android 函数式编程_Android开发人员的函数式编程-第1部分

android 函数式编程by Anup Cowkur通过安纳普考库(Anup Cowkur) Android开发人员的函数式编程-第1部分 (Functional Programming for Android Developers — Part 1) Lately, I’ve been spending a lot of time learning Elixir, an awesome functional programming language…

java编程 内存_Java编程技术之浅析JVM内存

JVMJVM->Java Virtual Machine:Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。基本认知:1.JVM是用于运行Java代码的假象计算机,主要有一套字节码指令…

bzoj1116: [POI2008]CLO

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id1116 题目大意:Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 题解&am…

java排序算法大全_各种排序算法的分析及java实现

排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于要找工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。排序大的分类可以分为两…

Cocos2d-x 3.0 简捷的物理引擎

Cocos2d-x 3.0 开发(九)使用Physicals取代Box2D和chipmunk http://www.cocos2d-x.org/docs/manual/framework/native/physics/physics-integration/zh -- 官网Demo 水墨鱼的专栏 http://www.cocos2d-x.org/docs/catalog/zh --- 官方 搭“server” 须要哪…

google i/o_Google I / O 2017最有希望的突破

google i/oby Aravind Putrevu通过Aravind Putrevu Google I / O 2017最有希望的突破 (The most promising breakthroughs from Google I/O 2017) Google I/O is one of the biggest developer conferences. This year was particularly exciting. There were two keynotes: o…

java clex 中的 IloLPMatrix

最近看 cplex 在 java 的 callback,发现它给的 callback 例子中,都是用 IloLPMatrix 这个类放约束条件,在 IloLPMatrix 中, 每个约束条件存储在 IloRange 中。 使用 IloLPMatrix 的好处是,这个类可以方便查看模型中的求…

6/12 Sprint2 看板和燃尽图

转载于:https://www.cnblogs.com/queenjuan/p/5578551.html

mailto 附带附件_我和我的朋友如何将附带项目发展为每月$ 17,000的业务

mailto 附带附件In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we oursel…

转:PHP应用性能优化指南

程序员都喜欢最新的PHP 7,因为它使PHP成为执行最快的脚本语言之一(参考PHP 7 vs HHVM 比较)。但是保持最佳性能不仅需要快速执行代码,更需要我们知道影响性能的问题点,以及这些问题的解决方案。本文涵盖了保障PHP应用平…

java 运行异常处理_Java编程异常处理和I/O流

重点:  1.在编写程序时,要正确地使用捕获例外和声明抛出异常的两种例外处理的方法。2.遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。3.正…

反射练习

1.反射 一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。 新建一个Person类: public class Person { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age age; } pu…

开源 物联网接入_我们刚刚推出了开源产品。 那么接下来会发生什么呢?

开源 物联网接入by Victor F. Santos由Victor F.Santos 我们刚刚推出了开源产品。 那么接下来会发生什么呢? (We just launched an open source product. So what happens next?) Last month me and the ninja god Pedro launched GitShowcase, a plug-and-play p…

Class? getClass()

getClass()方法属于Object的一部分,它将产生对象的类,并且在打印该类时,可以看到该类类型的编码字符串,前导"["表示这是一个后满紧随的类型的数组,而紧随的"I"表示基本类型int, //: initialization/OptionalTrailingArgrments.java package object;import …

log4j使用说明

1.log4j代码中修改输出级别:如: protected final Logger logger LoggerFactory.getLogger(Test.class); 将其转成实现类,修改输出级别即可System.out.println(logger.isDebugEnabled()?"debug is true":"debug is false&quo…

java list集合增删改_Java中集合类list的增删改查

今天给大家带来的是Java中list类的使用,java.util 包提供了list类来对线性数据操作List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列List可以精确的控…

IIS6、IIS7和IIS8各版本的差别

一、写在前面 目前市面上所用的IIS版本估计都是>6.0的.所以我们主要以下面三个版本进行讲解 服务器版本IIS默认版本server20036.0server20087.0server20128.0二、IIS6的请求过程 由图可知,所有的请求会被服务器中的http.sys组件监听到,它会根据IIS中的 Metabase 查看基于该 …

Android Studio 插件的使用

1、GsonFormat https://github.com/zzz40500/GsonFormat 2、Android SelectorChapek http://blog.csdn.net/weifei554287925/article/details/41727541