rabbitmq类
1、accept.php消费者代码需要在命令行执行
2、'username'=>'asdf'
,'password'=>'123456'
改成自己的帐号和密码
RabbitMQCommand.php操作类代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
<?php /* * amqp协议操作类,可以访问rabbitMQ * 需先安装php_amqp扩展 */ class RabbitMQCommand{ public $configs = array (); //交换机名称 public $exchange_name = '' ; //队列名称 public $queue_name = '' ; //路由名称 public $route_key = '' ; /* * 持久化,默认True */ public $durable = True; /* * 自动删除 * exchange is deleted when all queues have finished using it * queue is deleted when last consumer unsubscribes * */ public $autodelete = False; /* * 镜像 * 镜像队列,打开后消息会在节点之间复制,有master和slave的概念 */ public $mirror = False; private $_conn = Null; private $_exchange = Null; private $_channel = Null; private $_queue = Null; /* * @configs array('host'=>$host,'port'=>5672,'username'=>$username,'password'=>$password,'vhost'=>'/') */ public function __construct( $configs = array (), $exchange_name = '' , $queue_name = '' , $route_key = '' ) { $this ->setConfigs( $configs ); $this ->exchange_name = $exchange_name ; $this ->queue_name = $queue_name ; $this ->route_key = $route_key ; } private function setConfigs( $configs ) { if (! is_array ( $configs )) { throw new Exception( 'configs is not array' ); } if (!( $configs [ 'host' ] && $configs [ 'port' ] && $configs [ 'username' ] && $configs [ 'password' ])) { throw new Exception( 'configs is empty' ); } if ( empty ( $configs [ 'vhost' ])) { $configs [ 'vhost' ] = '/' ; } $configs [ 'login' ] = $configs [ 'username' ]; unset( $configs [ 'username' ]); $this ->configs = $configs ; } /* * 设置是否持久化,默认为True */ public function setDurable( $durable ) { $this ->durable = $durable ; } /* * 设置是否自动删除 */ public function setAutoDelete( $autodelete ) { $this ->autodelete = $autodelete ; } /* * 设置是否镜像 */ public function setMirror( $mirror ) { $this ->mirror = $mirror ; } /* * 打开amqp连接 */ private function open() { if (! $this ->_conn) { try { $this ->_conn = new AMQPConnection( $this ->configs); $this ->_conn->connect(); $this ->initConnection(); } catch (AMQPConnectionException $ex ) { throw new Exception( 'cannot connection rabbitmq' ,500); } } } /* * rabbitmq连接不变 * 重置交换机,队列,路由等配置 */ public function reset( $exchange_name , $queue_name , $route_key ) { $this ->exchange_name = $exchange_name ; $this ->queue_name = $queue_name ; $this ->route_key = $route_key ; $this ->initConnection(); } /* * 初始化rabbit连接的相关配置 */ private function initConnection() { if ( empty ( $this ->exchange_name) || empty ( $this ->queue_name) || empty ( $this ->route_key)) { throw new Exception( 'rabbitmq exchange_name or queue_name or route_key is empty' ,500); } $this ->_channel = new AMQPChannel( $this ->_conn); $this ->_exchange = new AMQPExchange( $this ->_channel); $this ->_exchange->setName( $this ->exchange_name); $this ->_exchange->setType(AMQP_EX_TYPE_DIRECT); if ( $this ->durable) $this ->_exchange->setFlags(AMQP_DURABLE); if ( $this ->autodelete) $this ->_exchange->setFlags(AMQP_AUTODELETE); $this ->_exchange-> declare (); $this ->_queue = new AMQPQueue( $this ->_channel); $this ->_queue->setName( $this ->queue_name); if ( $this ->durable) $this ->_queue->setFlags(AMQP_DURABLE); if ( $this ->autodelete) $this ->_queue->setFlags(AMQP_AUTODELETE); if ( $this ->mirror) $this ->_queue->setArgument( 'x-ha-policy' , 'all' ); $this ->_queue-> declare (); $this ->_queue->bind( $this ->exchange_name, $this ->route_key); } public function close() { if ( $this ->_conn) { $this ->_conn->disconnect(); } } public function __sleep() { $this ->close(); return array_keys (get_object_vars( $this )); } public function __destruct() { $this ->close(); } /* * 生产者发送消息 */ public function send( $msg ) { $this ->open(); if ( is_array ( $msg )){ $msg = json_encode( $msg ); } else { $msg = trim( strval ( $msg )); } return $this ->_exchange->publish( $msg , $this ->route_key); } /* * 消费者 * $fun_name = array($classobj,$function) or function name string * $autoack 是否自动应答 * * function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg."\n"; //处理消息 $queue->ack($envelope->getDeliveryTag());//手动应答 } */ public function run( $fun_name , $autoack = True){ $this ->open(); if (! $fun_name || ! $this ->_queue) return False; while (True){ if ( $autoack ) $this ->_queue->consume( $fun_name , AMQP_AUTOACK); else $this ->_queue->consume( $fun_name ); } } } |
send.php生产者代码
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php set_time_limit(0); include_once ( 'RabbitMQCommand.php' ); $configs = array ( 'host' => '127.0.0.1' , 'port' =>5672, 'username' => 'asdf' , 'password' => '123456' , 'vhost' => '/' ); $exchange_name = 'class-e-1' ; $queue_name = 'class-q-1' ; $route_key = 'class-r-1' ; $ra = new RabbitMQCommand( $configs , $exchange_name , $queue_name , $route_key ); for ( $i =0; $i <=100; $i ++){ $ra ->send( date ( 'Y-m-d H:i:s' ,time())); } exit (); |
accept.php消费者代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?php error_reporting (0); include_once ( 'RabbitMQCommand.php' ); $configs = array ( 'host' => '127.0.0.1' , 'port' =>5672, 'username' => 'asdf' , 'password' => '123456' , 'vhost' => '/' ); $exchange_name = 'class-e-1' ; $queue_name = 'class-q-1' ; $route_key = 'class-r-1' ; $ra = new RabbitMQCommand( $configs , $exchange_name , $queue_name , $route_key ); class A{ function processMessage( $envelope , $queue ) { $msg = $envelope ->getBody(); $envelopeID = $envelope ->getDeliveryTag(); $pid = posix_getpid(); file_put_contents ( "log{$pid}.log" , $msg . '|' . $envelopeID . '' . "\r\n" ,FILE_APPEND); $queue ->ack( $envelopeID ); } } $a = new A(); $s = $ra ->run( array ( $a , 'processMessage' ),false); |
rabbitmq类的更多相关文章
- RabbitMQ实战
RabbitMQ消息队列 一.Hello World 1.amqp-client客户端依赖 2.Rabbitmq类与方法 二.交换机类型 Exchange Type 1.消息轮询分发(Round Ro ...
- rabbitmq 使用PhpAmqpLib
rabbitmq类 rabbitmq.php <?php require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connec ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- RabbitMQ PHP操作类,守护进程及相关测试数据
封装类如下: <?php /* * amqp协议操作类,可以访问rabbitMQ * 需先安装php_amqp扩展 */ class RabbitMQCommand{ public $confi ...
- PHP操作RabbitMQ的类 exchange、queue、route kye、bind
RabbitMQ是常见的消息中间件.也许是还是不够了解的缘故,感觉功能还好吧. 讲到队列,大家脑子里第一印象是下边这样的. P生产者推送消息-->队列-->C消费者取出消息 结构很简单,但 ...
- php rabbitmq操作类及生产者和消费者实例代码 转
注意事项: 1.accept.php消费者代码需要在命令行执行 2.'username'=>'asdf','password'=>'123456' 改成自己的帐号和密码 RabbitMQC ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- RabbitMQ学习之spring-amqp的重要类的认识
对于大多数应用来说都做了与spring整合,对于rabbitmq来说.也有与spring的整合.可能通过spring的官网找到spring-amqp项目下载.spring-amqp项目包括三个子项目: ...
- RabbitMQ消息队列帮助类
调用 //消息队列发消息 MqConfigInfo config = new MqConfigInfo(); config.MQExChange = "DrawingOutput" ...
随机推荐
- jmeter做http请求时报错
在发帖时候发现请求不成功,在察看结果树的响应数据中提示:“”抱歉,您的请求来路不正确或表单验证串不符,无法提交“” 重复看了多次请求,发现Implementation这个地方选择HttpClient3 ...
- leetcode-11-盛水最多的容器
题目描述: 方法一:双指针 class Solution: def maxArea(self, height: List[int]) -> int: left = 0 right = len(h ...
- 「STL」bitset正传
前言 之前一些需要转二进制来解决的题目我看到很多大佬用了bitset. 然而我并不会这东西.看上去很高级的样子…… 改题改累了来学习一下233. 正文 一.bitset的构造 bitset有三种构造方 ...
- 用VC++MFC做文本编辑器(单文档模式)
用VC++MFC做文本编辑器(单文档模式) 原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: < xmlna ...
- BZOJ 1089 (SCOI 2003) 严格n元树
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严 ...
- (转)JNI入门教程之HelloWorld篇 .
转: http://blog.csdn.net/mingjava/article/details/180946 本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第 ...
- day22_1-课前上节复习+os模块
# ********************day22_1-课前上节复习+os模块 *******************# ********************day22_1-课前上节复习+os ...
- gradle 排除冲突依赖包
1 , 如何查看jar包依赖源 2 结果显示: 3 排除
- 如何快速合并多个TXT文本内容
工作中有时候需要合并很多文本内容,例如一些推送清单之类,一个一个打开去复制粘贴的话,少量还行,如果txt文本数据量大(10+M以上)且文件数量多(成百上千),这种方式就显得很低效了.具体要求如下: ...
- Linux 运维日常排错
硬盘与IO df -Th #查看挂载和文件系统类型.检查是否有空间用满,是否有业务数据未使用独立分区? iostat -x 1 1. 检查iowait是否持续在15%以上,说明硬盘负载高. 2. ...