消息队列,又叫做消息中间件。是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信(维基百科)。
基于以上的描述(MQ 是用来解决通信的问题),我们知道,MQ 的几个主要特点:
1、是一个独立运行的服务。生产者发送消息,消费者接收消费,需要先跟服务器建立连接。
2、采用队列作为数据结构,有先进先出的特点。
3、具有发布订阅的模型,消费者可以获取自己需要的消息。
我们可以把RabbitMQ 类比成邮局和邮差,它是用来帮我们存储和转发消息的。问题:如果仅仅是解决消息消费的问题,Java 里面有这么多的队列的实现,为什么不用他们呢?这个问题的答案,就跟有了HashMap 之后,为什么还要Redis 做缓存是一样的。
Queue 不能跨进程,不能在分布式系统中使用,并且没有持久化机制等等。