LINA消息服务设计.docx
- 文档编号:25107650
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:11
- 大小:438.32KB
LINA消息服务设计.docx
《LINA消息服务设计.docx》由会员分享,可在线阅读,更多相关《LINA消息服务设计.docx(11页珍藏版)》请在冰豆网上搜索。
LINA消息服务设计
LINA消息服务设计
Lina消息服务,提供了一个Java平台中关于面向消息中间件的API,用于在两个应用系统之间,或分布式系统中发送消息,接收消息,进行异步通信。
提供的接口,抽象消息服务,因此屏蔽各种不同MQ的差异性,在内部可以实现多种MQ现在暂时只支持HornetQ。
一:
Lina消息服务特点
高性能
1k大小的消息,1台消息服务器,1台消息发送端,可以达到3000TPS。
一台消息接收,可以达到1500TPS。
实时性
顺序性
保证消息的顺序发送和接收
高可靠性
1.消息在客户端发送消息,并不是请求直接发送到服务端,而是先存储在本地文件中。
通过发送线程,读取文件,进行消息异步发送。
2.对于网络中断,服务服务器宕机,依然正常使用,不影响客户端的消息发送。
3.当消息本地存储文件达到限制的时候,自动删除最早文件,抛弃最早消息,保证发送的健壮性
高可用性
用主备单个节点故障,不影响系统正常运行
可扩展性
可以对系统进行横向和纵向扩展,横向扩展可以向现有的服务环里面增加节点,纵向扩展可以增
加服务环
1:
整体架构
1整体结构图
消息客户端
特点:
(现有版本还未实现该功能)
1.消息服务集群处理,可以对系统进行横向扩展。
2.消息服务器,在启动的时候,把自己的服务注册到配置中心,从而使客户端能够发现消
息服务器。
3.消息客户端,在启动的时候,连接配置中心,找到可用的消息服务,对消息服务进行长
连接。
4.客户端根据消息哈希值,找对应的消息服务器,因此分担单个消息服务器的压力。
提升
整个系统的吞吐量。
5.消息服务,分为主从配备,当客户端在失效备援后连接到备份服务器时,备份服务器
开始激活并开始工作。
2类结构设计
Configuration
Ab'itractClrentMan砂?
r
说明:
实现了一个消息发送和接收的框架,自定义的客户端层,简化配置,可以进行扩展,实
现各种不同类型的MQ。
并且优化消息堆积处理策略处理。
LinaProducer是消息发送的接口,
LinaConsumer是消息接收接口,都是对外使用接口。
2个接口都依赖ClientFactory,
ClientFactory创建不同类型的mq实现子类。
消息的实现分为剥离出2层,抽象的一层由
AbstractClientManager实现,具体不同的mq实现从AbstractClientManager中继承,实现抽象方法,完成了扩展。
AbstractClientManager类中实现了消息实现的公用功能,如,依赖的
消息存储(保存、读取消息),获取配置等。
在框架中实现了一个DefaultLinaProducer实现
了LinaProducer接口,用户可以直接使用DefaultLinaProducer进行消息的发送。
DefaultLinaConsumer实现了LinaConsumer消息接收。
让用户可以继承DefaultLinaConsumer
重载receive方法,进行消息接收的处理。
3消息发送结构图
功能:
1.对于客户端的消息发送请求,不是直接发送到服务器的,而是先保存在文件中。
2.消息保存在文件中,数据文件一直增加,顺序在文件后面添加数据,避免随机写。
3.存储的文件,分为数据文件和操作日志文件,对应一次操作,分别记录2个文件。
4.索引建立在内存中,取数据是先通过内存中的索引获取数据位置,进行访问(该步骤存在随机读操作,但是由于索引在内存中,只会有一次读操作)
5.存在专门的发送线程,负责对消息服务器的数据发送。
6.发送数据的线程,发送的模式可为同步阻塞模式发送,批量发送。
7.发送的数据是从文件中获取,读取的数据是按顺序读取的,把数据交付给发送线程,
在由发送线程负责把数据发送至消息服务器。
8.当发送数据失败时候,反复进行重试发送,否则不会发送下一条数据
9.当消息发送成功后,从文件中删除此消息。
4消息接收结构图
功能:
1.客户端创建的时候,创建MQ的Consumer,同时绑定队列,建立监听。
2.连接到消息服务器后,请求消息,服务端就会发送消息送到消费端。
3.如果配置了消息缓存,消息会批量发送到客户端进行缓存。
4.消息接收到后,给服务器回复ack
5.在指定接收的消息个数,或者是每隔一个时间段,进行消息数据接收的提交确认。
现阶段的消息只支持消息队列模式,在这种模式中消息被发送到队列中。
通常消息会被
持久化以保证可靠的传送。
消息系统会将队列中的消息传送给接收者(receiver或consumer)。
当接收者处理消息完成后,它会发出完成的通知给消息系统。
得到通知的消息就会从队列中
删除,因此该消息不会被再次传送。
如果在收到消息前消息服务器发生故障导致系统崩溃,当系统恢复时,该消息会被再次传送给接收者。
这种模式允许一个队列有多个接收者。
但是一个消息最多只传送给一个接收者。
一个队
列的消息发送者(sender或producer)与接收者是完全独立的。
它们不知道彼此的存在。
女口:
图书订单系统是一个典型的消息队列的用例。
每一个订单都被包装为一个消息传送
到订单队列中。
假定有多个图书订购的终端向订单队列发关订单消息。
当一个消息到达队
列时它被持久化以防止系统崩溃时订单的丢失。
再假定有多个订单处理中心分布在不同的
机器上接收这个订单队列的消息。
消息系统将每一个消息发送给其中一个(并且只发送一个)
接收者(即一个订单处理模块)。
这样不同的订单可能会被不同的处理模块处理,但一个订
单只会被处理一次。
三:
设计分解
1.接口层设计
客户端现在设计的目的是尽量简单。
如下:
publicinterfaceLinaClient{
publicStringgetQueueName();
publicStringgetAddress();
throwsException;
publicvoidsend(Messagemessage)
publicObjectreceive(Objectobject);
}
2.
客户端消息存储
3.Hornetq客户端结构
CoreRemotingConnertion
上面的图是HornetQ客户端的核心结构,分别进行说明:
1.配置,TransportConfiguration中包含配置的具体数据信息,根据配置信息生成ServerLocator,在由ServerLocator仓U建ClientSessionFactory
2.客户端使用ClientSessionFactory类的实例仓U建ClientSession实例。
ClientSessionFactory知道如何连接到服务器并创建会话(session)。
它是可以根据
不同需要灵活配置的。
ClientSessionFactory实例是通过HornetQClient工厂类创建的。
3.ClientSession客户端使用ClientSession来发送和接收消息,并控制事务的使用。
ClientSession可以支持事务性和非事务性的应用。
它还提供了一个XAResource接
口,因些它可以加入到一个JTA交易中。
ClientSession管理着ClientConsumers和
ClientProducers。
ClientSession实例可以注册一个可选的
SendAcknowledgementHandler。
每当消息被送达HornetQ服务器中时,HornetQ
就用它来异步地发出通知。
有了这个独特的功能,客户可以不必阻塞在每次消息的
发送操作上来保证消息安全到达服务器。
如果采用阻塞的方法,那么每一个消息
的发送都要包括往返两次的网络传递操作,开销是很大的。
有了这个异步方式就
可以避免这种开销,建立真正的异步的端到端间的系统。
4.ClientConsumer客户端使用ClientConsumer实例来接收来自queue的消息。
5.ClientProducer客户端使用ClientSession创建ClientProducer实例来向服务器发送消息。
ClientProducer可以指定一个地址,用来向其发送消息。
6.Channel,对Netty的Channel进行了一次封装。
主要是用来与消息服务器进行通讯。
4.数据接收示意
在客户端和服务器的通讯过程中,使用不同的命令包来区分不同的命令,根据解析包,进行
对应的处理。
ClicntSessionPacketHandler
h3ndiePa handleItecelveLargeMesuge 5•消息发送 session的channel 一个客户端,对应的只存在一个发送消息线程处理消息发送,消息通过写入io. HornetQ 服务 Channel SendAcknowledgementHandler LimitMap put
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINA 消息 服务 设计