Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。

主要核心部件:

  • Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.

  • RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

  • Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

Dubbo工作原理:

本文将通过实例进行讲解,包括入门以及和springMVC mybatis整合还有管理端的演示

部分大图直接观看不太清晰,请在图片上点击右键,选择新窗口打开

本文中有一个接口是实现了dao,和mybatis整合后进行与数据库的交互,另一个接口如上图演示的是主要想展示的多个服务提供者之间的负载均衡,均雷同,后面会提供具体的下载地址

步骤1: 定义共通接口,接口应该定义在一个单独的maven项目中(jar),这样服务提供者和消费者才能引入

和普通的jar接口一样,不解释

步骤2:实现服务提供者

服务提供者也很简单,就是实现了第一步里面定义的接口,这里很简单,就是打出一句话,以便后面区分消费者到底调用到了哪个服务提供者了。

另外,需要将服务暴露出去,所以配置文件里面的dubbox.xml就很重要了

这里需要注意的是,由于dubbox的服务注册要基于zookeeper,所以需要先启动一个,具体操作可以参考我博客的其他文章或者自行搜索。

为了区分消费者到底调用了哪个服务提供者,所以服务提供者我们至少要部署两套,所以,需要修改上面的端口,另外,实现类里面打印的文字,还是要区分下

步骤3:实现消费者

接口的调用方就很简单了,和标准的springMVC一样,这里我们是整合好了的,直接注入就可以了

这里因为要测试到底调用到了哪个服务提供者,所以我们循环调用1000次,根据打印的文字来进行区分,所以上面红色字体需要修改的地方一定要改

步骤4:启动dubbox-admin, 管理端可以查看到发布的服务以及服务的提供者有那些。(我通过源码编译获取的,稍后我会提供我打好包的下载地址)  

   a 将duboox-admin.war修改为ROOT.war并放在tomcat webAPp目录下,先删除掉ROOT文件夹, 然后启动

    

    同时,启动后确认下zookeeper地址是否正确,若不正确,停止server,按下图修改好了再启动

    

步骤5:启动服务提供者1

  看见我们的提供的接口了,因为现在还没有启动消费者这边,所以暂时没有消费者,点击任意接口进去看可以看到服务提供者的信息

  

  注意到这里的端口,就是之前dubbo.xml里面配置的

  

步骤六,启动服务提供者2,如果在启动2的时候报端口被占用,那就是xml中端口没改,仔细检查下

  启动后服务列表还是一样的,因为我们两个服务提供者提供的服务接口都一样,就不截图了

  但是现在我们每个接口都有两个提供者了,理论上点进任意接口后有两个实现,并且端口还不一样  是不是?

  

  如上图,和我们预期是一样的。

步骤7:启动消费者

  启动消费者后我们在admin服务首页看,注意看重点,不要看这里的文字  红色圈起来的

  

  最开始是没有消费者,现在变为了正常了

步骤8:启动消费者,进行测试,看看打印的log吧, 如果不是两个server信息,那就再仔细检查吧

  

另外可以在admin里面配置负载均衡机制再试试,

  

  说说由此引发的"血案":

  之前的web项目,为了提高并行处理能力,除了代码优化外,一般都是部署了多套,前端通过nginx等负载均衡机制进行分发。

  接触dubbox自己经过思考认为:

提供给web端的Controller层业务逻辑相对简单,占用的处理时间及资源相对较少,主要的处理逻辑在service层以及dao数据交互层

如果将controller层单独分离出来供用户直接访问, service和Dao一同作为服务部署多套,如果处理服务层的机器已经很吃力,则可以动态的增加服务节点来进行分担。

  

这样 controller层代码就可以减少很多部署资源,主要的在后端service和dao了。

  然后“血案”就来了, 我正尝试着将现有项目进行拆分,通过压力测试来验证我的设想。。。。。。

  

dubbox微服务实例及引发的“血案”的更多相关文章

  1. consul客户端配置微服务实例名称和ID

    consul客户端必须配置微服务实例名称和ID,微服务启动的时候需要将名称和ID注册到注册中心,后续微服务之间调用也需要用到. 名称可以通过以下两种方式配置,优先级从高到低.两个都不配置则默认服务名称 ...

  2. 微服务实战(二):使用API Gateway--转

    原文地址:http://dockone.io/article/482 [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选 ...

  3. 微服务实战(二):使用API Gateway

    微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...

  4. 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka

    Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...

  5. 微服务实战-使用API Gateway

    当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互.在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点.在微服务架构中,每一个微服务暴露一组细粒度的服务提供点.在本篇文章中,我 ...

  6. SpringCloud微服务实战——第三章服务治理

    Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...

  7. 微服务实战(二):使用API Gateway - DockOne.io

    原文:微服务实战(二):使用API Gateway - DockOne.io [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用 ...

  8. 一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  9. 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

随机推荐

  1. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  2. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  3. .NET 提升教育 第一期:VIP 付费课程培训通知!

    为响应 @当年在远方 同学的建议,在年前尝试进行一次付费的VIP培训. 培训的课件:点击下载培训周期:10个课程左右,每晚1个半小时培训价格:1000元/人.报名方式:有意向的请加QQ群:路过秋天.N ...

  4. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果

    前言 话说又来需求了,之前对于在SelfHost中需要嵌套页面并操作为非正常需求,这回来正常需求了,客户端现在加了https,老大过来说WebAPi访问不了了,这是什么情况,我去试了试,还真是这个情况 ...

  5. Java中Comparable与Comparator的区别

    相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...

  6. iOS逆向工程之Reveal工具的安装、配置与使用

    今天博客内容比较简单,不过还是蛮重要的.经常有小伙伴在QQ上私下问我,说博客中是如何使用Reveal查看AppStore中下载应用的UI层级的,那么就在今天这篇博客中作为一个主题来统一的介绍一下吧.虽 ...

  7. win8.1硬盘安装ubuntu14.04双系统

    在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubu ...

  8. PHP设计模式(六)原型模式(Prototype For PHP)

    原型设计模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型设计模式简单的来说,顾名思义, 不去创建新的对象进而保留原型的一种设计模式. 缺点:原型设计模式是的最主要的缺点就 ...

  9. ie6 ie7 ie8 ie9兼容问题终极解决方案

    放下包袱,解决低版本兼容问题   这是一个老生常谈的问题,自然解决这个问题的方案也比较多,下面整理了一些解决方法: 1.强制使用高版本渲染模式. 强制使用Edge模式来解析网页代码 <meta ...

  10. 5.2 Array类型的方法汇总

    所有对象都具有toString(),toLocaleString(),valueOf()方法. 1.数组转化为字符串 toString(),toLocaleString() ,数组调用这些方法,则返回 ...