~随笔A017~分布式开发-dubbo

  一、dubbo项目搭建

  dubbo项目需要有个注册中心,而注册中心可以使用很多技术来进行数据保存,但从常规的使用来讲,zookeeper工具是首选。所以在进行dubbo项目搭建就需要首先搭建zookeeper,而zookeeper是单实例即可,无需进行集群。

  zookeeper可以运行在Linux下或者window中,但考虑到项目最终应用,我们需基于Linux进行搭建。

  zookeeper下载地址:http://zookeeper.apache.org/

  在许多开源项目中,zookeeper都有其非常重要的作用,而dubbo会将远程接口的服务注册到zookeeper之中。(测试时,只需zookeeper采用单节点)

  详细参考~随笔A014~

  二、dubbo项目

  在开发之中,如果要实现dubbo项目的编写,需要有3个项目

  远程接口、业务实现、客户端,为了保证项目的整体风格一致,以及所有开发包的统一版本管理,我们需要定义一个父项目(目的:定义基础插件、版本属性信息,同时其他项目里都要求继承这个项目)

  所有的项目搭建使用maven进行管理,所以保证eclipse中已配置好maven的setting.xml文件。

  1.创建parent项目,此项目作为整个公共项目约束出现

  2.远程调用接口(业务接口),但由于整个项目里考虑到开发版本的问题,所以对于业务接口也需要继承父项(parent项目中的相关约定)。修改pom.xml配置文件,让其去继承parent/pom.xml文件

  3.创建dubbo业务中心(配置项目依赖库)

  业务中心是整个dubbo搭建的核心所在,而进行业务中心的搭建,需要配置许多开发包。

  a)环境搭建

  b)业务实现

  c)dubbo服务启动

  

   d)dubbo项目监控

  为了监控dubbo程序的执行状态,专门提供了一个监控的程序端,

  提醒:dubbo的监控里默认集成web服务器(jetty)

  三、dubbo深入配置

  1.dubbo集群搭建

  dubbo都是有一个单独的RPC服务端,随后再使用一个客户端来进行服务的调用,但如果此时RPC服务端出现了问题(无法再提供服务),此时必须有容错机制(使用备份主机进行操作处理)。

  2.dubbo负载均衡

  如果说现在提供dubbo服务的有多台机器,采用负载均衡的算法,将用户的请求均衡的分配到不同的节点上来执行,在整个负载均衡的处理中,有个权重的概念(权重大则分配服务多)。

  3.dubbo线程模型

  在许多的开发之中都会提供有线程池的概念,利用线程池可以有效的提高操作性能,而dubbo本身支持线程池的配置。观察下dubbo的线程模型

  

  简言之,所有具体的业务实现的子类的对象都保存在线程池中,这样如果在使用某个dubbo服务时就可以不再进行临时的对象创建,以提升操作性能。

  针对于dubbo线程模型中有2个默认配置

  

  4.dubbo直连

  默认情况下如想使用dubbo的服务,那么必须通过注册中心才可以进行访问,但是在dubbo里可以绕过注册中心进行地址直连。

  之前dubbo服务启动时会在zookeeper里配置相应的节点数据(使用的远程接口名称)

  5.Token令牌

  dubbo里存在直连操作,那一定存在安全隐患,这里提供令牌的处理操作,避免直连操作(所有服务通过注册中心来完成)。

  服务的提供者需生成一个令牌,而后注册中心要负责管理这个令牌操作。随后对令牌进行检查,检测之后将令牌交给消费者,而后进行令牌的访问,访问提供者的时候需要对令牌进行验证。

  也就是说,令牌的操作在于服务提供者(Provider)的配置上。

  6.服务降级

  在庞大的系统中,有了RPC定义的业务中心之后理论上可实现吞吐量很大的高性能项目,但在很多情况下,有可能某些服务特别消耗资源(12306抢票会消耗主机大量性能,如果继续维持其他的RPC服务,就可能造成核心业务的耗损,所有此时就必须考虑让系统进行降级处理)

  所谓降级就是指系统暂停提供服务。在dubbo里针对服务的降级,提供2种解决方案:

  

  a)当某个服务不可用时使用null来进行数据返回

   

  四.SSO整合处理

  1.功能说明与集群定义

  从实际的项目开发来讲,授权检测是个非常重要的环节,在Shiro的开发框架里有关于授权操作的问题。而现在有了dubbo之后,依然需要将业务中心的授权进行处理。

  对于整个安全性操作来讲,由于dubbo工作在Linux下,所以可直接利用最简单的iptables进行安全的白名单配置,只需要这样的配置就可实现端口的服务安全,(即:只允许有特定的服务器地址才可进行连接)但这种层次的安全并不是业务层次的安全,还需要使用Shiro来进行处理。

  既然dubbo已经牵扯到了分布式的集群开发,那么在实际的工作之中就可能运行多个web端

  2.定义用户授权业务中心

  对于Shiro与Dubbo的结合主要是需要用户自己来定义授权操作,所以授权操作就必须使用MyBatis和spring一起完成业务开发,为了开发方便,是需要建立专门的业务层的

  3.sso与dubbo整合

  当前的sso有自己用户的认证处理,所以本次要做事为将之前编写的授权业务与Shiro中的Realm进行整合处理即可

  4.dubbo业务授权检测

  五、dubbo与消息中间件

  1.dubbo与消息组件整合简介

  对于dubbo的使用,大部分情况下就是一个RPC服务端,但是一般RPC服务端都需web端才能进行调用,这样是很不方便的(如:现在很多智能设备进行手机连接,也有部分数据会通过其他设备:手环-统计心跳、脉搏、步数)那么对于这些数据的采集,不可能每动一次,进行一次数据申报,一般都是在连接到手机之后,有手机进行消息的发送,只需发送即可,无需关心返回结果。这种情况下往往会利用消息组件来进行消息的接收,同时要知道如果使用的是队列消息,还可方便的进行缓冲作用。

  2.配置ActiveMQ组件

  a).ActiveMQ组件取得:http://activemq.apache.org:

  3.dubbo消费端

  消息组件建立完成之后就需要建立dubbo消费端

  4.定义消息提供者

  消息的消费者定义完成了,还需定义一个消息的发送操作,也要有个专门的接口完成处理。

  六、dubbo与springBoot集成

  实际上dubbo严格来讲算得上是一种微架构的产物,而在现在流行的微服务的创建之中,springBoot是一种很好的手段,所以将dubbo与springBoot进行整合处理。

  1.搭建springBoot

  如果想开发springBoot,所有项目的文件需要去继承springBoot的配置项,可是在整体的项目里已存在一个父的pom.xml文件,所以为了解决这样的问题,需要对parent/pom.xml进行修改。

  完成springboot的环境搭建后,就需要将dubbo的服务引进来

  a).修改parent/pom.xml文件,进行springboot配置

  2.调用dubbo业务

  a).修改springboot/pom.xml

  b).建立源代码目录

    src/main/resoures/META-INF/spring:保存一个之前定义的spring-dubbo-consumer.xml

    src/main/profiles/{dev.beta.product}/config:保存dubbo.properties文件。

原文地址:https://www.cnblogs.com/gaojl/p/8522877.html