您的位置:首页 > 其它

ActiveMQ 五 (实战一 设计思路)

2012-04-28 10:35 113 查看
ActiveMQ的设计

MQ消息服务产品功能(新版)

一.背景

消息中间件对目前大中型互联网来说是非常重要的,在业务数据流动中仅次于RPC服务调用,担负着越来越复杂的网站业务从主流程上解耦和减压的重要责任。

目前,MQ在走秀网中广泛用于如下生产系统:商品中心、促销中心、渠道中心、CMS、搜索引擎、秀团。不像Web2.0网站,这些网站对消息的可靠性要求不是很高,走秀网电商的特点,它是一个在线交易系统,对商品、价格、库存、促销相关信息的发送和中转,使得MQ作为消息中间件,对消息的可靠性要求非常高,因此新的版本MQ设计和使用MQ必须遵循可靠性优先的设计原则。

二.功能特色

新版的基于ActiveMq的异步消息服务系统有如下特点:

1) 高可靠 基于事务、消息持久化的消息发送和存储,以及提供本地消息存储提供更高的可靠性

2) 高性能 异步消息发送可到7000-10000条/秒

3) 动态线性扩展 增加服务器可动态横向扩容

4) 统一配置管理 通过spring相关配置文件,减少代码量

5 ) 简单易用 只需实现几个API接口 见本文第七部分-编程接口

6)管理和监控

Ø 线性扩展服务器,应对系统规模发展

Ø 提供故障处理模式,更快处理故障

Ø 数据监控界面,轻松知道性能瓶颈

Ø 服务器端验证队列属性,更少错误发生

二.设计思路

Ø 支持客户端存储,提高系统可靠性。发送端和接受端通过嵌入式数据库Berkeley DB提供本地存储。

Ø 实现连接池功能,提供消息数据源,简化应用使用和配置难度。

Ø 封装MQ接口,实现MQ系统对应用透明,以便支持多种MQ服务器,甚至实现不同服务器混合部署,目前已经实现对ActiveMQ 的支持。

Ø 支持客户端Cluster支持以便取代效率不高的MQ系统的负载均衡。

Ø 支持1 .. N,N .. 1,N .. N多种客户端对服务器的配置。

Ø 支持协议转换和消息过滤。

四. 总体架构

五.功能模块:

系统流程

功能层次

六.集群

更好的可靠性、可伸缩性和可扩展性。新的版本中实现动态扩容增加系统规模和容量。

1.单个集群

2.横向扩展

向集群中添加机器,横向扩展集群容量

七.编程接口

Connector

现有MQ系统以Queue为单位抽象,每个Queue都要配置serverAddress,userName,password,连接数量等信息,每个客户端都会配置连接池,配置复杂,连接重用效率低,加重服务器负载。本次设计借鉴数据库概念,为每组服务器配置一个数据源,每个Queue看成是数据源中的一个数据实体,类似于数据库中表的概念,这样应用只要两个信息:数据源和Queue就可以配置一个Sender或者Reciever,简化了开发人员对消息系统的理解,同时也因为和数据库配置类似,有利于降低学习曲线。

JmsSource接口说明:

说明:接口很简单,只要使用getConnection()方法,就可以得到一个连接,但是需要注意的是,使用连接后必须释放,否则会到致连接池耗尽。

Sender

JmsSender代表一个消息发送端,由一个JmsSource和一个queue唯一对应。接口说明如下:

接口说明:接口很简单,只需要调用send(obj)方法就可以发送消息到对应的队列中,对象必须实现Serializable接口。

Reciever

JmsReciever代表一个消息接受端,接受服务器push过来的消息,所以还需要实现一个JmsWorker接口,提供业务处理逻辑,义务功能。

接口说明:JmsReciever接口与JmsSender接口有所不同,因为接收端是被动的接受,所以必须明确调用start()方法,告诉服务器已经准备好了,可以接受消息,在特殊情况下也可以调用stop()暂停消息接受。另外,还需要提供一个JmsWorker对象作为JmsReciever处理消息的工具。

JmsWorker接口只要一个方法,processMessage(Serializable msg),应用需要在这个接口实现自己的义务规则来处理消息,如果处理成功返回True,否则为False。

Extension

扩展部分包括JmsFilter和JmsTransformer,分别处理消息过滤和消息协议转换。

接口说明:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: