RabbitMQ 初探】的更多相关文章

消息均发 前言 由前文 RabbitMq初探——消息分发 可知,rabbitmq自带分发机制——消息会按顺序的投放到该队列下的多个消费者,例如1,3,5投放消费者C1,2,4,6投放消费者C2. 这就有个隐含的缺点:每个消息的消费时间可能不一样,极端情况下,投放给C1的每个消息消费都需要很长时间,而投放给C2的每个消息消费需要很短,就会导致C1进程 负担重,C2进程很悠闲. 所以,我们需要根据任务量来均发消息. 均发消息实现 1. 开启消息确认机制. 2. 为每个消费者分配且只分配一个消息,待r…
rabbitmq Server安装 rabbitmq server安装很简单. 安装erlang环境 rpm -ihv erlang-18.1-1.el6.x86_64.rpm rpm -ihv rabbitmq-server-3.6.12-1.el6.noarch.rpm 启动 /sbin/service rabbitmq-server start 一些常用命令 rabbitmqctl start_app #启动rabbitmq rabbitmqctl stop_app #关闭rabbitmq…
有哪些优点 可靠性:RabbitMQ 提供了多种技术可以让你在性能和可靠性之间进行权衡.这些技术包括持久性.投递确认.发布者证实和高可用性. 灵活的路由:提供了多种内置交换机类型.如果你有更复杂的路由需求,可以将这些交换机组合起来使用,甚至你可以写自己的交换机类型 多协议和广泛的客户端:RabbitMQ 支持多种消息协议中的消息传递以及 你能想到的语言几乎都有与其相适配的 RabbitMQ 客户端. 原理 Broker: 接收和分发消息的应用,RabbitMQ Server就是Message B…
rabbitmq构造rpc 前言 rpc——remote procedure call 远程调用.在我接触的使用过http协议.thrift框架来实现远程调用.其实消息队列rabbitmq也可以实现. 原理 我们称调用远程服务者为Client,远程服务提供者为Server. Client充当生产者,将请求发送到rabbitmq队列中,Server作为消费者,处理Client请求产生结果数据result,此刻Server作为生产者,将result 通过rabbitmq队列传递到Client,Cli…
publish and subscribe 前言 前面的例子 我们都是用到的都是消息单一消费,即一条消息被单个消费者消费.像微博系统的消息推送,是一条消息推送给所有订阅到该频道的用户. 这里我们就需要用到rabbitmq的发布与订阅(publish and subscribe) 原理 前面我们弱化rabbitmq,只抽象出了 生产者.队列.消费者三个概念. 现在需要介绍rabbitmq的整体数据流转过程. 数据由生产者发送给交换机,交换机接收数据并把它发送给与自己绑定好的队列,队列接收消息并且把…
消息持久化 前言 通过上一节,我们知道,有消息确认机制,保证了当消费者进程挂掉后,消息的不丢失. 但是如果rabbitmq挂掉呢?它的队列和消息都会丢失的.为了保证消息在rabbitmq挂掉重启后不丢失, 我们需要用到rabbitmq的持久化机制. 开启持久化功能 1. 首先保证queue的持久化,在publisher和consumer声明queue时,开启持久化功能.本章例子可以通过下面代码开启 //函数第三个参数置为true,代表开启队列的持久化 $channel->queue_declar…
消息确认机制 前言 消息队列的下游,业务逻辑可能复杂,处理任务可能花费很长时间.若在一条消息到达它的下游,任务刚处理了一半,由于不确定因素,下游的任务处理进程 被kill掉啦,导致任务无法执行完成.而沿用我们前面几章的消息删除[消息一旦抛给下游,就立马从队列删除],这可能会引发问题——消息没有处理完,但是队列 里的消息已经被删除了. 因此,rabbitmq内含 消息确认机制[Message acknowledgment],简称ack.rabbitmq将消息发送给consumer,此刻消息不会从队…
消息分发 前言 我们在用到消息队列的场景,一般是处理逻辑复杂,耗时,所以将同步改为异步处理,接入队列,下游处理耗时任务. 队列消息数量很大,且下游worker进程(消费者)处理耗时长,所以就有了任务的积压.rabbitmq提供了任务分发的机制. 流程弱化如下图: 可以接入多个消费者,rabbitmq会将消息均匀的分发给每一个消费者. 耗时任务 我们可以在consumer端用sleep()函数来模拟耗时任务,通过判断消息的点的个数,来进行相应的sleep几秒. sender.php require…
<?php /** * Created by PhpStorm. * Date: 2017/10/17 * Time: 16:21 */ class Rabbit { public function mq_set(){ $conn_args = [ 'host' => '127.0.0.1', //rabbitmq 服务器host 'port' => 5672, //rabbitmq 服务器端口 'login' => 'guest', //登录用户 'password' =>…
HelloWorld 前言 这里我们弱化broker内部构造.将整体分为三部分. P:producer.生产者. C:Consumer.消费者. queue:队列. 后面的代码都依赖于 the php-amqplibAPI composer安装php-amqplib 1. 新建composer.json { "require": { "php-amqplib/php-amqplib": ">=2.6.1" } } 2. composer.p…