消息队列(一)介绍与常见实现

概念

消息队列这东西不是必须的,根据场景来选择。这么流行的东西,J2EE当然有对应的规范,JMS,几个概念掌握很很简单理解。 选择使用上,一般用用AMQ就能解决大部分问题。kafka也非常火,连spring都有spring kafka项目。在大的项目中还是很有用的,虽然kafka也是消息队列,但是持久化非常快,可以扩展很多新的应用。

特性

使用场景

与RPC不同

设计问题

消息堆积

处理消息对接一般是采用持久化的方式,存储系统可以分为以下几类

上面的持久化方式选择上,速度与可靠性反比。非持久化投递性能高,但处理慢的话会堆积在内存,有内存限制。

消费关系

有以下三种:

可靠性

设计上需要考虑超时、down机、消息没有送达、送达后数据没落地、数据落地了回复没收到等异常。

顺序消息

一般来说要求消息顺序发送,就会允许消息丢失,否则重发消息的话消息顺序性就不能保证了。

重复消息

如何鉴别重复消息有以下几种方式

慢消费

这是消息队列中非常常见的问题,处理方式有多种,需要根据实际场景选择。后面介绍AMQ的文章中有提及处理方式。

常见实现与特点

Kafka/Jafka

ZeroMQ

RabbitMQ

ActiveMQ

Redis

参考

消息队列设计

Table of Contents