Java学习笔记技术文今日看点

Dubbox实践笔记

2016-11-09  本文已影响2030人  hpw123

github项目地址https://github.com/SuperMan42/dubbox-ssm

简介

SOA(面向服务体系结构)PRC(远程过程调用)

面向服务的体系结构,将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。

服务消费者(service consumer)可以通过发送消息来调用服务,这些消息由一个服务总线(service bus)转换后发送给适当的服务实现。

Dubbo框架设计一共划分了10个层,最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层,图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景为服务提供方使用的接口,位于中轴线上的为双方都用到的接口

  1. 服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
  2. 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类
  3. 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory
  4. 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory,Registry和RegistryService,可能没有服务注册中心,此时服务提供方直接暴露服务
  5. 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster,Directory,Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
  6. 监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory,Monitor和MonitorService。
  7. 远程调用层(Protocol):封装RPC调用,封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
  8. 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger,xchangeChannel,ExchangeClient和ExchangeServer。
  9. 网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为 Channel,Transproter,Client,Server和Codec。
  10. 数据序列化层(Serialize):可复用的一些工具,扩展接口为 Serialization,ObjectInput,ObjectOutput和ThreadPool。

服务调用


上图中,蓝色的表示与业务有交互,绿色的表示只对Dubbo内部交互。上述图所描述的调用流程如下:
  1. 服务提供方发布服务到服务注册中心;
  2. 服务消费方从服务注册中心订阅服务;
  3. 服务消费方调用已经注册的可用服务;

注册/注销服务
服务的注册与注销,是对服务提供方角色而言,那么注册服务与注销服务的时序图,如图所示:

服务订阅/取消
为了满足应用系统的需求,服务消费方的可能需要从服务注册中心订阅指定的有服务提供方发布的服务,在得到通知可以使用服务时,就可以直接调用服务。反过来,如果不需要某一个服务了,可以取消该服务。下面看一下对应的时序图,如图所示:

Dubbo以包结构来组织各个模块,各个模块及其关系,如图所示:


可以通过Dubbo的代码(使用Maven管理)组织,与上面的模块进行比较。简单说明各个包的情况:

dubbox

dubbo

api项目
pom.xml
SerializationOptimizerImpl.java
User.java
UserRestService.java
UserService.java
provider项目
pom.xml
UserRestServiceImpl.java
UserServiceImpl.java
dubbo-demo-provider.xml
consumer项目
pom.xml
DemoConsumer.java
dubbo-hello-consumer.xml

框架整合

Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定时调度) + Bootstrap Html5(支持PC、IOS、Android)

安装

dubbo-admin部署

用户名root 密码 root

dubbo-monitor-simple部署

打包后,目录dubbo-simple/dubbo-monitor-simple/target中会生成dubbo-monitor-simple-xxx-assembly.tar.gz 用tar -zxvf *.gz解压,解压后有三个子目录bin, conf, lib,

配置文件

dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
#dubbo.registry.address=multicast://224.5.6.7:1234
dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
dubbo.protocol.port=7070
dubbo.jetty.port=8180
dubbo.jetty.directory=${user.home}/monitor
dubbo.charts.directory=${dubbo.jetty.directory}/charts
dubbo.statistics.directory=${user.home}/monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN

启动:bin/start.sh

项目介绍

参考资料

dubbox入门
ZooKeeper高可用集群安装和配置
dubbox入门实例
dubbox监管
dubbo架构设计详解
dubbox实现

类似项目

disconf

参考项目

ssm-dubbo
soa
iBase4J
dubbo-spring-boot-mybatis-redis
xultimate-remoting

上一篇 下一篇

猜你喜欢

热点阅读