
消息队列中间件
文章平均质量分 72
lamp_yang_3533
你又可以了
展开
-
RabbitMQ 死信队列
死信交换机DLX(Dead-Letter-Exchange)可以称之为死信交换机,也称之为死信邮箱。当消息在一个正常的业务队列中变成死信(dead message)之后,它能被重新发送到另一个交换机中,这个交换机就是 DLX,绑定 DLX 的队列就是死信队列。如果一个正常的业务队列设置了死信邮箱,那么,在业务队列的消费者运行后,死信邮箱就会创建成功,并且在 RabbitMQ Management(web管理工具)的 Queues 菜单栏中,可以看到该业务队列 Features 栏会多出一个 DLX 标原创 2020-12-20 22:15:44 · 316 阅读 · 0 评论 -
RabbitMQ 过期时间(TTL)
TTL(Time to Live)即过期时间。在 RabbitMQ 中,可以对消息和队列设置 TTL。设置消息的 TTL设置消息的 TTL,有两种方式:通过队列属性设置,队列中所有的消息都有相同的过期时间。对消息本身单独设置,每条消息的 TTL 可以不同。如果两种方式一起使用,则消息的 TTL 以较小的数值为准。通过队列属性设置消息在队列中的生存时间一旦超过设置的 TTL 值时,就会变成【死信】(Dead Message),消费者可能无法再收到该消息。通过队列属性设置 TTL,是在 q原创 2020-12-20 14:14:49 · 389 阅读 · 0 评论 -
RabbitMQ 如何保证交换机中的消息不丢失
我们知道,生产者会先将消息发送给交换机,但是如果交换机此时没有匹配到相关的队列时,交换机中的消息就会出现丢失的问题。那么,如何保证交换机中的消息不丢失呢?mandatory 参数当 basicPublish 方法的 mandatory 参数设为 true 时,如果交换器无法匹配到绑定的队列,那么 RabbitMQ 会调用 Basic.Return 命令将消息返回给生产者。当 mandatory 参数设置为 false 时,若出现上述情形,则消息直接被丢弃。那么,当 mandatory 参原创 2020-12-13 13:58:07 · 1144 阅读 · 0 评论 -
RabbitMQ 消费者回执和发布确认
为了保证数据安全,消费者和生产者的回执(ack)都是非常重要的。由于我们无法保证消息都能像我们期望的那样,正常到达另一端或者被 Consumer 消费成功。因此,publisher 和 consumer 都需要一种机制,来确保消息投递成功了和消息消费成功了。在 AMQP 0-9-1 中,消费者处理完消息后返回 acknowledgement,被称为消费者回执(Consumer Acknowledgement)。中间件收到生产者的消息后返回 acknowledgement,被称为发布确认(Publis原创 2020-12-12 15:17:48 · 2210 阅读 · 0 评论 -
RabbitMQ 入门指南(六)
Remote Procedure Call (RPC)Remote Procedure Call,即远程过程调用,简称RPC,它是一种网络数据交互的协议规范,它让客户端能够像调用本地的函数一样调用远程服务端的函数。多系统之间的内部数据交互,一般采用 RPC。在 RabbitMQ 入门指南(二)中,我们学习了如何使用 Work Queue 将耗时的任务分配给多个 worker。但是,如果我们需要调用远程服务器的方法并等待它的返回结果,该怎么处理?这里,我们将使用 RabbitMQ 来构建.原创 2020-12-06 17:16:42 · 317 阅读 · 0 评论 -
RabbitMQ 入门指南(五)
Topic在上一节的示例中,我们使用 direct 类型的交换机,使得消费者可以自由选择接收各种错误级别的日志消息。但是,direct 这种完全匹配的方式仍然有一定的局限性,无法满足实际的业务场景需要。direct 无法基于多重标准进行路由匹配。比如,假设我们既要根据日志消息的错误级别来订阅消息,又要根据日志消息的设备来源来订阅消息。为了实现这一功能,就需要用到更为灵活的交换机。下面我们来介绍 topic 类型的交换机。topic exchangetopic 交换机与 direc原创 2020-12-05 11:34:19 · 385 阅读 · 0 评论 -
RabbitMQ 入门指南(四)
Routing在这一章节,我们将介绍如何选择性地订阅消息的子集。例如,我们要实现这个功能,一个消费者仅仅只需将错误的日志消息保存到磁盘文件;另一个消费者仍然可以打印所有的日志消息。Binding在上一节中,我们利用绑定建立了队列和交换机之间的绑定关系。$channel->queue_bind($queue_name, 'logs');这种绑定关系,可以简单地理解为队列对交换机中的消息感兴趣。binding_keyqueue_bind() 方法的第三个参数是 ro原创 2020-11-30 21:16:32 · 358 阅读 · 0 评论 -
RabbitMQ 入门指南(三)
Publish/Subscribe发布/订阅模式,可以将一条消息同时发送给多个 consumer。为了举例说明该模式,我们将构建一个简单的日志系统。它包含两个程序,第一个程序用于发布日志消息,第二个用于接收并打印日志消息。每一个运行中的 receiver 程序副本都将接收消息。一个 receiver 用来将日志存储到磁盘;同时,另一个 receiver 用来查看日志。本质上,已发布的日志 message 将被广播给所有的 receiver。ExchangeRabbitMQ 中的消原创 2020-10-29 11:35:46 · 193 阅读 · 0 评论 -
RabbitMQ 入门指南(二)
Work QueueWork Queue,又称为 Task Queue,用于将耗时的 task(任务)分发给多个 worker。对于资源密集型(消耗资源)的任务,我们往往需要等待它处理完毕,才能处理下一个任务。这样是不合理的,而 Work Queue 可以解决这个问题。Work Queue 可以计划安排稍后再处理消息任务,它将任务封装压缩为一条消息,存到队列中。后台运行的 worker 进程将会弹出 task,并最终执行对应的 job。多个 worker 之间共享所有的 task,注意是原创 2020-10-18 16:12:46 · 289 阅读 · 1 评论 -
RabbitMQ 入门指南(一)
简介RabbitMQ 是消息中间件,它主要负责接收、存储和转发(发送)消息。默认端口为 5672。消息指的是二进制的数据。你可以把 RabbitMQ 看作是一个邮局,它包含信箱、邮递员。我们以 PHP 语言为例,来讲解如何使用 RabbitMQ。准备工作环境要求PHP 的版本 >= 5.6 PHP 的 bcmath 扩展(Windows 内置支持,Linux 需手动安装) PHP 的 sockets 扩展(Windows 直接开启,Linux 需手动安装)安装 p原创 2020-09-18 19:59:11 · 251 阅读 · 0 评论 -
RabbitMQ 的重要概念(术语)
1. 简介MQ(Message Queue)消息队列是一种应用程序对应用程序的通信方法,应用程序通过读(出队)写(入队)队列的消息(针对应用程序的数据)进行通信。MQ是消费者-生产者模型的典型代表,生产者往消息队列中不断写入消息,而消费者则可以读取或者订阅队列中的消息,并进行消息处理。消息队列中间件是分布式系统中非常重要的组件,可适用于异步处理、应用解耦、流量削锋、消息通讯、日志处理等场景,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统中不可缺少的中间件。比较常用的消息队列中间原创 2020-08-24 22:34:20 · 514 阅读 · 0 评论 -
Windows 安装 RabbitMQ
准备工作下载 Erlanghttps://www.erlang.org/downloads这里我们下载 Erlang/OTP 22.0 版本http://erlang.org/download/otp_win64_22.0.exe下载 RabbitMQhttps://www.rabbitmq.com/install-windows.html这里我们下载 rabbitmq-...原创 2019-09-08 10:25:36 · 306 阅读 · 0 评论 -
消息队列中间件-常用的 MQ
RabbitMQRabbitMQ 是开源的分布式消息队列系统,用 erlang 语言开发。RabbitMQ 是 AMQP 的标准实现。AMQP(Advanced Message Queuing Protocol)高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件而设计。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全性。消息中间件主要...原创 2019-09-07 22:48:43 · 539 阅读 · 0 评论 -
消息队列中间件-概述
1. 简介MQ(Message Queue)消息队列是一种应用程序对应用程序的通信方法,应用程序通过读(出队)写(入队)队列的消息(针对应用程序的数据)进行通信。MQ是消费者-生产者模型的典型代表,生产者往消息队列中不断写入消息,而消费者则可以读取或者订阅队列中的消息,并进行消息处理。消息队列中间件是分布式系统中非常重要的组件,可适用于异步处理、应用解耦、流量削锋、消息通讯、日志处理等...原创 2019-09-06 23:27:37 · 1204 阅读 · 0 评论