RabbitMQ
文章平均质量分 76
AirGo.
[WHY]每一个你不满意的当下,都有一个你不曾努力的过去。
展开
-
关于RabbitMQ的跨部门分发使用权限控制和规范总结
背景在公司使用RabiitMQ进行消息分发时,如果仅仅是简单的一对一关系,开发起来非常容易,直接按照正常的分发和绑定即可。但是如果要进行生产、分发、消费,分别解耦,就需要制定一套完整的使用方案,并且对exchange、route、queue的命名要遵循一定的规范,并且需要对不同服务根据规范对名称进行写入和消费权限控制。场景举例触发场景:用户下单成功,需要通知短信服务哦、库存服务、商家服务生产者:订单服务消费者:短信服务(告知用户下单成功)、库存服务(库存更新)、商家服务(新订单生成)原创 2020-07-17 16:58:34 · 741 阅读 · 1 评论 -
一篇文搞明白RabbitMQ原理和开发应用
首先思考几个问题:什么是消息队列?消息队列可以解决什么问题? RabbitMQ可以做什么? RabbitMQ可以实现消息的过期失效吗? RabbitMQ可以实现延迟队列吗? RabbitMQ为何消息堆积越多,性能越大幅度下降? RabbitMQ的可靠性体现在哪几方面?分别是如何实现的?什么是消息队列提供了以松散耦合的灵活方式集成应用程序的一种机制,为我们提供了基于存储和转发的应用程序之间的异步发送,用于异步、解耦、削峰。生产者:投递消息的一方 消费者:接收消息的一方 虚拟机:用于原创 2020-06-03 21:44:12 · 387 阅读 · 0 评论 -
RabbitMQ消息队列的可靠性
概述RabbitMQ的可靠性贯穿整个消息的生命周期,主要包含以下三个阶段:消息生产阶段 消息转发阶段 消息消费阶段消息生产阶段通过事务机制或发送方确认机制保证消息已经正确地发送并存储至RabbitMQ中事务机制事务会在一条消息发送之后阻塞发送端,直到收到服务端的响应,所以它是同步阻塞的:try{ channel.txSelect(); //开启事务 channel.BasicPublish(); //消息生产 channel.txComment();原创 2020-06-03 21:34:31 · 521 阅读 · 0 评论 -
通过存储机制和队列结构理解为什么RabbitMQ会随着队列堆积吞吐量降低
存储机制首先需要明确一点,不管是持久化消息还是非持久化消息都可以被写入到磁盘。持久化消息在到达队列时就被写入到磁盘,并且如果内存允许,持久化到消息也会在内存中保存一份备份,这样可以提高一定的性能,当内存不够用时会从内存中删除。非持久化的消息一般只保存在内存时,在内存不够用时会被换入到磁盘,以节省内存。消息存储是在持久层(逻辑概念,并不真实存在)上完成的,包含两个部分:队列索引和消息存储...原创 2020-05-03 16:10:32 · 2325 阅读 · 2 评论 -
RabbitMQ死信队列原理并实现延迟队列
死信队列死信交换机(Dead-Letter-Exchange),当消息在一个队列中变成死信之后,它能被发送到另一个交换机中,这个交换机就是DLX,绑定DLX的队列就称之为死信队列消息变成死信一般是由于下面三种情况:消息被拒绝(Basic.Reject或Basic.Nack),并在调用时设置requeue参数为false 消息过期 队列达到最大长度通过在channel.queueD...原创 2020-05-01 19:23:06 · 2107 阅读 · 0 评论 -
RabbitMQ的消息有效期(TTL)和队列有效期(expires)
消息有效期我们有2种方式设置消息的有效期:一种是通过队列属性x-message-ttl设置,投递到该队列中的所有消息都有相同的过期时间 另一种是通过消息属性expiration设置消息本身的有效期如果两种同时使用,会以两者之间较小的那个数值为准,单位都为毫秒两种设置有效期的删除策略是不同的:通过队列设置的,一旦消息过期,就会从队列中抹去,因为过期的消息肯定在队列头部,Rabbi...原创 2020-05-01 19:11:08 · 5916 阅读 · 0 评论 -
RabbiMQ的消息流向和备份交换机
在消息生产的 channel.basicPublish 方法中,有2个参数,用来控制消息如果无法成功到达目标队列时返回给生产者。mandatory和备份交换机mandatory用来告知服务器至少将该消息发送到一个队列中,否则将消息返回给生产者。当该参数设置为true时,当交换机无法根据自身类型和路由键将消息发送到合适队列时,RabbitMQ会调用Basic.Return命令将消息返回给生产...原创 2020-05-01 19:06:57 · 447 阅读 · 1 评论 -
GoLang封装rabbtimq
go get github.com/streadway/amqp封装生产者和消费者:package rabbitmqimport ( "context" "fmt" "github.com/opentracing/opentracing-go" "github.com/streadway/amqp" srcLog "log" "time" "why/config" ...原创 2020-01-28 16:35:03 · 1003 阅读 · 1 评论 -
php-amqplib使用实例
相关链接composer安装地址:https://packagist.org/packages/php-amqplib/php-amqplib搭建和配置rabbitmq:https://blog.csdn.net/why444216978/article/details/84570801安装PHP-AMPQ:https://blog.csdn.net/why444216978/arti...原创 2019-12-24 20:52:56 · 2293 阅读 · 0 评论 -
RabbitMQ三种常用交换机类型原理和PHP实现
fanout交换器会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中,此时生产者投递消息时不需要指定route。也就是说用fanout交换器发送消息的生产者,会将消息发送到所有与该交换器绑定的队列上。(通过交换器名识别)示例代码publisher.php<?phpdate_default_timezone_set("Asia/Shanghai");$c...原创 2019-10-13 16:39:05 · 927 阅读 · 0 评论 -
RabbitMQ+PHP实现topic交换机消息队列
多个生产者,一消费者publisher.php路由key为why.one publisher1.php路由key为why.two consumer.php的交换机类型为topic,绑定路由模式为why.*(*是匹配1个单词,#是匹配多个单词)publisher.php<?phpdate_default_timezone_set("Asia/Shanghai");$co...原创 2019-09-26 02:57:17 · 1283 阅读 · 0 评论 -
Linux安装PHP-AMPQ
一:安装rabbitmq-c(AMQP通信协议的RabbitMQ实现的C语言接口)wget -c https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gztar zxf rabbitmq-c-0.8.0.tar.gzcd rabbitmq-c-0.8.0./confi...原创 2018-11-27 18:21:32 · 707 阅读 · 0 评论 -
RabbitMQ+PHP实现direct交换机消息队列
1、生产者:publisher.php<?php date_default_timezone_set("Asia/Shanghai"); //配置信息 $conn_args = array( 'host' => '127.0.0.1', 'port' => '5672', 'login' =>...原创 2018-12-13 13:38:18 · 1075 阅读 · 0 评论 -
通过Linux定时任务加shell脚本检测RabbitMQ消费者运行状况以及自启
目的:防止RabbitMQ消费者进程中断影响业务1、编写rabbitmq_consumer.php消费者文件(关于消费者和生产者请移步:https://blog.csdn.net/why444216978/article/details/84987011)2、编写shell脚本 check_php_runing.sh定时检测消费者而启动情况,如未启动则启动#!/bin/sh...原创 2018-12-13 13:42:14 · 2441 阅读 · 0 评论 -
Linux安装RabbitMQ并配置权限和web端插件
一、安装erlang(RabbitMQ是基于erlang开发的)下载Erlang安装包http://erlang.org/download/otp_src_20.3.tar.gz上传到服务器tmp目录下,进入到tmp目录进行安装。# cd /tmp# mkdir -p /usr/local/erlang# tar -xzvf otp_src_20.1.tar.gz# cd ot...原创 2018-11-27 18:08:11 · 558 阅读 · 2 评论