讯息服务metaq Notify
Notify在设计思路上与传统的MQ有一定的不同,他的核心设计理念是
1. 为了消息堆积而设计系统。消费者出现问题是个非常常见的情况,而消息系统则必须能够在后端消费不稳定的情况下,仍然能够保证用户写入的正常并且TPS不降。
2. 无单点,可自由扩展的设计
MetaQ对外提供的是一个队列服务,内部实现也是完全的队列模型,这里的队列是持久化的磁盘队列,具有非常高的可靠性,并且充分利用了操作系统cache来提高性能。
- 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
- Producer、Consumer、队列都可以分布式。
- Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合。
- 能够保证严格的消息顺序
- 提供丰富的消息拉取模式
- 高效的订阅者水平扩展能力
- 实时的消息订阅机制
- 亿级消息堆积能力
n 广播消费一条消息被多个Consumer消费,即使这些Consumer属于同一个Consumer Group,消息也会被Consumer Group中的每个Consumer都消费一次。
在CORBA Notification规范中,消费方式都属于广播消费。
n 集群消费
一个Consumer Group中的Consumer实例平均分摊消费消息,类似于JMS规范中的Point-to-Point Messaging
特点如下:
u Each message has only one consumer.
u A sender and a receiver of a message have no timing dependencies. The receiver can fetch the message whether or not it was running when the client sent the message.
u The receiver acknowledges the successful processing of a message.
n 主动消费
Consumer主动向Broker发起获取消息请求,控制权完全在于Consumer应用。
类似于JMS规范中描述的Synchronously方式消费
n 被动消费
Consumer注册一个Callback接口,由Metaq后台自动从Broker接收消息,并回调Callback接口。
类似于JMS规范中的描述的Asynchronously方式消费
n 顺序消息
消费消息的顺序要同发送消息的顺序一致,在Metaq中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,且发送到同一个队列,这样Consumer就可以按照Producer发送的顺序去消费消息。
n 普通顺序消息
顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker重启,由于队列总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。
n 严格顺序消息
顺序消息的一种,无论正常异常情况都能保证顺序,但是牺牲了分布式Failover特性。