用PHP尝试RabbitMQ(amqp扩展)实现消息的发送和接收
消费者:接收消息
逻辑:
创建连接-->创建channel-->创建交换机-->创建队列-->绑定交换机/队列/路由键-->接收消息
- <?php
- /*************************************
- * PHP amqp(RabbitMQ) Demo - consumer
- * Author: Linvo
- * Date: 2012/7/30
- *************************************/
- //配置信息
- $conn_args = array(
- 'host' => '192.168.1.93',
- 'port' => '5672',
- 'login' => 'guest',
- 'password' => 'guest',
- 'vhost'=>'/'
- );
- $e_name = 'e_linvo'; //交换机名
- $q_name = 'q_linvo'; //队列名
- $k_route = 'key_1'; //路由key
- //创建连接和channel
- $conn = new AMQPConnection($conn_args);
- if (!$conn->connect()) {
- die("Cannot connect to the broker!\n");
- }
- $channel = new AMQPChannel($conn);
- //创建交换机
- $ex = new AMQPExchange($channel);
- $ex->setName($e_name);
- $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型
- $ex->setFlags(AMQP_DURABLE); //持久化
- echo "Exchange Status:".$ex->declare()."\n";
- //创建队列
- $q = new AMQPQueue($channel);
- $q->setName($q_name);
- $q->setFlags(AMQP_DURABLE); //持久化
- echo "Message Total:".$q->declare()."\n";
- //绑定交换机与队列,并指定路由键
- echo 'Queue Bind: '.$q->bind($e_name, $k_route)."\n";
- //阻塞模式接收消息
- echo "Message:\n";
- while(True){
- $q->consume('processMessage');
- //$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答
- }
- $conn->disconnect();
- /**
- * 消费回调函数
- * 处理消息
- */
- function processMessage($envelope, $queue) {
- $msg = $envelope->getBody();
- echo $msg."\n"; //处理消息
- $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答
- }
生产者:发送消息
逻辑:
创建连接-->创建channel-->创建交换机对象-->发送消息 Continue reading →
Posted in 系统架构 | Tagged amqp, RabbitMQ
windows下安装rabbitmq的php扩展amqp(原创)
从php官方下载相应的版本http://pecl.php.net/package/amqp,我这里使用的是1.4.0版本(http://pecl.php.net/package/amqp/1.4.0/windows)
根据当前使用的php版本选择相应的扩展dll,下载后是一个压缩包,里面有两个dll扩展(php_amqp.dll和rabbitmq.1.dll)。
我的环境是64位的,php5.5.12.所以使用的是http://windows.php.net/downloads/pecl/releases/amqp/1.4.0/php_amqp-1.4.0-5.5-ts-vc11-x64.zip
1.将php_amqp.dll放在php的ext目录里,然后修改php.ini文件,在文件的最后面添加两行
1
2
|
[amqp] extension=php_amqp.dll |
2.将rabbitmq.1.dll文件放在php的根目录里(也就是ext目录的父级目录),然后修改apache的httpd.con文件,文件尾部添加一行
1
|
LoadFile "d:/wamp/bin/php/php5.5.12/rabbitmq.1.dll" |
这里的路径根据情况修改,我这里使用的wampserver软件。
3.重启apache,并查看phpinfo信息。只要看到amqp 字样即可。
用PHP尝试RabbitMQ(amqp扩展)实现消息的发送和接收的更多相关文章
- 【Spring Boot】Spring Boot之整合RabbitMQ并实现消息的发送和接收
一.项目配置 1)引入maven坐标 <!--amqp--> <dependency> <groupId>org.springframework.boot</ ...
- 探索 OpenStack 之(15):oslo.messaging 和 Cinder 中 MessageQueue 消息的发送和接收
前言:上一篇文章 只是 RabbitMQ 的科普,本文将仔细分析 Cinder 中 RabbitMQ 的各组件的使用.消息的发送和接收等.由于各流程步骤很多,本文只会使用若干流程图来加以阐述,尽量做到 ...
- Queue 消息的发送与接收(PTP 消息传递模型)
上篇博客写到了JMS两种消息模型(P2P.pub/sub)<JMS两种消息模型>.本篇博客通过一个实例来进一步了解P2P模型. Queue消息的发送与接收--PTP消息传递模型,样例: Q ...
- Udp实现消息的发送和接收、以及图片的上传
//Udp实现消息的发送和接收 import java.io.IOException; import java.net.DatagramPacket; import java.net.Datagram ...
- nodejs 数据库操作,消息的发送和接收,模拟同步
var deasync = require('deasync'); //导入模板 var mysql=require('mysql'); var Stomp = require('stompjs'); ...
- msgrcv,msgsnd进程通信,消息的发送和接收
//进程通信,消息的发送和接收 //client.c #include <unistd.h> #include <sys/types.h> #include <sys/s ...
- 使用spring-rabbit测试RabbitMQ消息确认(发送确认,接收确认)
1.首先是rabbitmq的配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...
- RabbitMQ消息确认(发送确认,接收确认)
前面几篇记录了收发消息的demo,今天记录下关于 消息确认方面的 问题. 下面是几个问题: 1.为什么要进行消息确认? 2.rabbitmq消息确认 机制是什么样的? 3.发送方如何确认消息发送成功? ...
- RabbitMQ,为应对消息从发送到消费,各个环节消息丢失的解决方案
1.发送方 为保证消息到达exchange,在这个过程中不丢失. 用事务或者发送方确认机制 见<RabbitMQ实战指南>4.8节 2.为保证消息不会因为到达exchange后 ...
随机推荐
- STL merge的实现细节
//std::merge的两个版本 template<class InputIt1, class InputIt2, class OutputIt> //First version Out ...
- 关于AjaxPro的用法
1.添加引用AjaxPro.2.dll到项目中 2.添加webconfig iis6添加 在<system.web>中添加: <httpHandlers> <add ve ...
- 全面理解BFC
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- CorelDRAW 文件实用工具 CDRTools 2
随着 CorelDRAW 更新脚步越来越频繁,版本之间兼容性问题越来越突出,特别是跨版本之间打开会有很多问题,比如:文字跑位.透镜变向.位图出错.颜色改变,甚至会造成文件损坏.最好的办法就是哪一个版本 ...
- 【C++】GacLib——ListView.ViewSwitching
http://www.gaclib.net/Demos/Controls.ListView.ViewSwitching/Demo.html#FILESYSTEMINFORMATION_H
- (转)《深入理解java虚拟机》学习笔记3——垃圾回收算法
Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构 ...
- @properties指针说明
在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了,在此我也不介绍,网上有很多相关文章. 现在我们看看iOS5中新的关键字strong, weak, ...
- php源代码安装常见错误与解决办法分享
错误:configure: error: libevent >= 1.4.11 could not be found 解决:yum -y install libevent libevent-de ...
- 【BZOJ 1877】 [SDOI2009]晨跑
Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...
- C# - 高级方法参数
可选参数 -必须有个默认值,默认值必须是字面值,常量值,新对象实例或者默认值类型值. public List<string> GetWords( string sentence, bool ...