在介绍消息队列,rabbitMQ等之前,需要先明确一些基础概念和名词的定义,才能更好地使用rabbitMQ或其他消息队列服务。
简单来说,生产者和消费者是一种设计模式,生产者负责生产消息,而消费者负责消费或者处理消息。消息可以是任意数据。本模式的结构如下:
生产者缓冲区消费者生产者将新的消息存入缓冲区并等待消费者在达到某一特定条件之后进行消费。
本模式有如下优点:
解耦:由于有缓冲区,消费者不直接依赖生产者支持并发:不会发生阻塞,原因同上支持忙闲不均:这也是用后缓冲区的好处。本模型通常还遵循如下约定:
生产者仅仅在仓储未满时候生产,仓满则停止生产。消费者仅仅在仓储有产品时候才能消费,仓空则等待。当消费者发现仓储没产品可消费时候会通知生产者生产。生产者在生产出可消费产品时候,应该通知等待的消费者去消费。消息包含两部分内容:有效载荷( payload )和标签( label )。有效载荷就是你想要传输的数据。标签描述了有效载荷,并且RabbitMQ 用它来决定谁将获得消息的拷贝。举例来说,不同于TCP 协议的是,当你明确指定发送方和接收方时, AMQP 只会用标签表述这条消息(一个交换器的名称和可选的主题标记),然后把消息交由Rabbit。 Rabbit会根据标签把消息发送给感兴趣的接收方。这种通信方式是一种“发后即忘”( fire-and-forget )的单向方式。
上面提到的缓冲区即微消息队列,也就是说,消费消息的顺序是按照生产消息的顺序进行的,先进先出。
它是一种消息队列的代理服务器。可以有多个生产者将多个消息发送到rabbitmq服务器,并由服务器决定发送到哪一个消费者。
创建和销毁TCP连接的代价是昂贵的。生产环境中可能有多个生产者和消费者线程对服务器进行通信,为了确保线程的封闭性,可能会产生多个TCP连接对每一个线程进行单独的通信。为了避免频繁创建和销毁TCP连接,rabbitMQ在一个TCP内部封装了多个信道,这样既保证了线程封闭性,也避免了额外的性能开销。
AMQP(Advanced Message Queue Protocol)定义了一种消息系统规范。这个规范描述了在一个分布式的系统中各个子系统如何通过消息交互。而RabbitMQ则是AMQP的一种基于erlang的实现。AMQP将分布式系统中各个子系统隔离开来,子系统之间不再有依赖。子系统仅依赖于消息。子系统不关心消息的发送者,也不关心消息的接受者。
本文只介绍ubuntu下的安装配置。 终端中执行如下命令:
sudo apt-get install erlang sudo apt-get isntall rabbitmq-server #查看运行状态 service rabbitmq-server statusrabbitmq 相应的maven坐标:
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.0.4</version> </dependency>后续更新
https://blog.csdn.net/u013905744/article/details/80533795
https://www.cnblogs.com/zqyanywn/p/7676948.html