为什么要使用MQ消息中间件?它解决了什么问题?关于为什么要使用消息中间件?消息中间件是如何做到同步变异步、流量削锋、应用解耦的?网上已经有很多说明,我这里就不再说明。我在接下来的RabbitMq系列博客里会将官方的讲解翻译过来,同时加以自己的理解整理成博客,希望能和大家共同交流,一起进步。
RabbitMq原理图
1、RabbitMq简介
RabbitMq是一个消息中间件:它接收消息、转发消息。你可以把它理解为一个邮局:当你向邮箱里寄出一封信后,邮递员们就能最终将信送到收信人手中。类似的,RabbitMq就好比是一个邮箱、邮局和邮递员。RabbitMq和邮局最大的区别是:RabbitMq接收、转发的都是二进制数据块--消息,而不是纸质的数据文件。
RabbitMq、消息相关术语如下:
生产者:生产者只发送消息,发送消息的程序即为生产者:
消息队列:消息队列就相当于RabbitMq中的邮箱名称。尽管消息在你的程序和RabbitMq中流动,但它只能存储在消息队列中。队列本质上是一个大的消息缓存,它能存多少消息,取决于主机的内存和磁盘限制。多个生产者可以往同一个消息队列中发送消息;多个消费者可以从同一个队列中获取数据。我们以下列图形来表示一个消息队列:
消费者:消费者是一个等待接收消息的程序:
注意:生产者、消费者和RabbitMq可以在不同的机器上;在很多的应用中,一个生产者同时也可能是消费者。
2、“Hello World!”
在这小节里,我们将写一个消息生产者用来发送消息、一个消息消费者来消费消息(接收消息并打印出来)。
在下面图形中,“P”是我们的生产者,“C”是我们的消费者,中间的红框是我们的消息队列,保存了从生产者那里接收到的准备转发到消费方的消息。
Java客户端类库说明:
RabbitMq使用多种协议,本指南使用AMQP 0-9-1协议,该协议是一个开源的、通用的消息协议。RabbitMq有多种语言的客户端,这里我们使用JAVA语言的客户端做实验。通过以下地址下载RabbitMq客户端jar包和依赖包:
amqp-client-5.5.1.jar
slf4j-api-1.7.25.jar
slf4j-simple-1.7.25.jar
把这三个jar包拷贝到你的工作目录,包括后面教程要新建的java文件。
2.1 发送消息
生产者连接RabbitMq,发送一条简单的消