用PHP Demo 学 RabbitMq
来源:互联网 发布:json转java对象 在线 编辑:程序博客网 时间:2024/05/21 20:28
先安装rabbitmq的php扩展amqp,至于为何是amqp,稍微搜索一下就会了解rabbitmq是基于amqp协议的。
概要
我们先大致了解一下rabbitmq,简单的说就是一个生产者-消费者模式的消息队列,支持消息持久化。同时需要了解几个名词,以及这几个名词之间的联系
- 生产者(producer)
- 信道(channel)
- 消息交换机(exchange)
- 消息队列(queue)
- 消费者(consumer)
- 路由关键词
工作流程
生产者产生的消息通过信道投递到某个消息交换机上,投递过程中指定了一个路由关键字,消息交换机将这条消息投递到不同的消息队列中的时候,依据路由关键字,该消息可能会被投递到某一个或者某几个符合路由规则的消息队列中,消费者从消息队列中取出消息进行后一步处理。
分发机制
当多个消费者同时在消费同一个消息队列的时候,rabbitmq会顺序分发队列中message,当每个message收到ack,就会将这条消息从消息队列中删除,这种分发的机制叫做round-robin
这里不过多讨论rabbitmq的消息分发机制,有兴趣可以参考这个衔接
RabbitMQ消息队列(三):任务分发机制
Demo
$conn_args = array( 'host'=>'127.0.0.1', //rabbitmq 服务器host 'port'=>5672, //rabbitmq 服务器端口 'login'=>'guest', //登录用户 'password'=>'guest', //登录密码 'vhost'=>'/' //虚拟主机 );$e_name = 'e_demo';$q_name = 'q_demo';$k_route = 'key_1';$conn = new AMQPConnection($conn_args);if(!$conn->connect()){ die('Cannot connect to the broker');}$channel = new AMQPChannel($conn);$ex = new AMQPExchange($channel);$ex->setName($e_name);$ex->setType(AMQP_EX_TYPE_DIRECT);$ex->setFlags(AMQP_DURABLE);$status = $ex->declareExchange(); //声明一个新交换机,如果这个交换机已经存在了,就不需要再调用declareExchange()方法了.$q = new AMQPQueue($channel);$q->setName($q_name);$status = $q->declareQueue(); //同理如果该队列已经存在不用再调用这个方法了。$ex->publish($msg, $k_route);
以上代码就构造了一个生产者,并投递了一条消息到rabbitmq中。
$conn_args = array( 'host'=>'127.0.0.1', 'port'=>5672, 'login'=>'guest', 'password'=>'guest', 'vhost'=>'/' );$e_name = 'e_demo';$q_name = 'q_demo';$k_route = 'key_1';$conn = new AMQPConnection($conn_args);if(!$conn->connect()){ die('Cannot connect to the broker');}$channel = new AMQPChannel($conn);$ex = new AMQPExchange($channel);$ex->setName($e_name);$ex->setType(AMQP_EX_TYPE_DIRECT);$ex->setFlags(AMQP_DURABLE);$q = new AMQPQueue($channel);var_dump($q);$q->setName($q_name);$q->bind($e_name, $k_route);$arr = $q->get();var_dump($arr);$res = $q->ack($arr->getDeliveryTag());$msg = $arr->getBody();var_dump($msg);
以上代码构建了一个消费者,并从消息队列中拿出一条消息,并把该消息从队列中移除。
补充
补充说明一下rabbitmq的使用命令 rabbitmq-server start
是启动rabbitmq服务。
主要的管理rabbitmq使用的是rabbitctl命令
rabbitmqctl start_app
启动rabbitmqrabbitmqctl stop_app
关闭rabbitmqrabbitmqctl reset
重置rabbitmq队列rabbitmqctl list_queues
查看rabbitmq中队列rabbitmqctl list_exchanges
查看rabbitmq中的交换机
0 0
- 用PHP Demo 学 RabbitMq
- 用PHP Demo 学 RabbitMq
- RabbitMQ + PHP演示demo
- rabbitmq demo
- PHP rabbitmq
- rabbitmq php
- java rabbitMQ demo
- rabbitmq java demo详解
- java rabbitMQ demo
- rabbitmq demo学习
- rabbitmq官网DEMO
- SpringBoot + RabbitMQ 使用Demo
- RabbitMQ demo及其详解
- java rabbitMQ demo
- (五)RabbitMQ消息队列-安装amqp扩展并订阅/发布Demo(PHP版)
- 用PHP尝试RabbitMQ(amqp扩展)
- RabbitMQ(二):实例demo
- Rabbitmq消息发送接收Demo
- 标签或者图片循环旋转
- 后缀表达式 (2) —— 表达树与后缀表达式的运算
- Ubuntu下部署FastDFS 5.05
- 成功的背后!(给所有IT人)
- Build.VERSION.SDK_INT判断Android SDK版本号
- 用PHP Demo 学 RabbitMq
- css3 的一些新属性
- 安装DBUtils报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in ra
- SQL Server 2008 查版本及 位数
- .260. Single Number III
- 房地产库存两极分化态势明显
- digitalocean 搭建 ss server
- 判断一个整数是不是回文数
- Java总结篇系列:Java多线程 http://www.cnblogs.com/lwbqqyumidi/p/3804883.html