├── README.md ├── demo-4 ├── logs_from_rabbit.log ├── emit_log_direct.php └── receive_logs_direct.php ├── demo-3 ├── logs_from_rabbit.log ├── emit_log.php └── receive_logs.php ├── demo-2 ├── new_task.php └── worker.php └── demo-1 ├── send.php └── receive.php /README.md: -------------------------------------------------------------------------------- 1 | rabbitmq-tutorial-php-demo 2 | ========================== 3 | 4 | RabbitMQ官方中文入门教程(PHP版) Demo 源码!! 5 | -------------------------------------------------------------------------------- /demo-4/logs_from_rabbit.log: -------------------------------------------------------------------------------- 1 | string(46) "[*] Waiting for messages. To exit press CTRL+C" 2 | string(39) "[x]error: Run. Run. Or it will explode." 3 | string(41) "[x]warning: Run. Run. Or it will explode." 4 | -------------------------------------------------------------------------------- /demo-3/logs_from_rabbit.log: -------------------------------------------------------------------------------- 1 | string(46) "[*] Waiting for messages. To exit press CTRL+C" 2 | string(31) " [x] Received:info:Hello World!" 3 | string(31) " [x] Received:info:Hello World!" 4 | string(19) " [x] Received: 1111" 5 | -------------------------------------------------------------------------------- /demo-3/emit_log.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | 8 | $exchangeName = 'logs'; 9 | $message = empty($argv[1]) ? 'info:Hello World!' : ' '.$argv[1]; 10 | 11 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 12 | $connection->connect() or die("Cannot connect to the broker!\n"); 13 | 14 | $channel = new AMQPChannel($connection); 15 | $exchange = new AMQPExchange($channel); 16 | $exchange->setName($exchangeName); 17 | $exchange->setType(AMQP_EX_TYPE_FANOUT); 18 | $exchange->declare(); 19 | 20 | $exchange->publish($message, ''); 21 | var_dump("[x] Sent $message"); 22 | 23 | $connection->disconnect(); 24 | -------------------------------------------------------------------------------- /demo-4/emit_log_direct.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | $severity = count($argv) > 2 ? $argv[1] : 'info'; 8 | $message = empty($argv[2]) ? 'Hello World!' : ' ' . $argv[2]; 9 | 10 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 11 | $connection->connect() or die("Cannot connect to the broker!\n"); 12 | 13 | $channel = new AMQPChannel($connection); 14 | $exchange = new AMQPExchange($channel); 15 | $exchange->setName('direct_logs'); 16 | $exchange->setType(AMQP_EX_TYPE_DIRECT); 17 | $exchange->declare(); 18 | 19 | $exchange->publish($message, $severity); 20 | var_dump("[x] Sent $message"); 21 | 22 | $connection->disconnect(); 23 | -------------------------------------------------------------------------------- /demo-2/new_task.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | 8 | $exchangeName = 'demo'; 9 | $queueName = 'task_queue'; 10 | $routeKey = 'task_queue'; 11 | $message = empty($argv[1]) ? 'Hello World!' : ' '.$argv[1]; 12 | 13 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 14 | $connection->connect() or die("Cannot connect to the broker!\n"); 15 | 16 | $channel = new AMQPChannel($connection); 17 | $exchange = new AMQPExchange($channel); 18 | $exchange->setName($exchangeName); 19 | $queue = new AMQPQueue($channel); 20 | $queue->setName($queueName); 21 | $queue->setFlags(AMQP_DURABLE); 22 | $queue->declare(); 23 | $exchange->publish($message, $routeKey); 24 | var_dump("[x] Sent $message"); 25 | 26 | $connection->disconnect(); 27 | -------------------------------------------------------------------------------- /demo-1/send.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | $exchangeName = 'demo'; 8 | $queueName = 'hello'; 9 | $routeKey = 'hello'; 10 | $message = 'Hello World!'; 11 | 12 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 13 | $connection->connect() or die("Cannot connect to the broker!\n"); 14 | 15 | try { 16 | $channel = new AMQPChannel($connection); 17 | $exchange = new AMQPExchange($channel); 18 | $exchange->setName($exchangeName); 19 | $queue = new AMQPQueue($channel); 20 | $queue->setName($queueName); 21 | $exchange->publish($message, $routeKey); 22 | var_dump("[x] Sent 'Hello World!'"); 23 | } catch (AMQPConnectionException $e) { 24 | var_dump($e); 25 | exit(); 26 | } 27 | $connection->disconnect(); 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /demo-3/receive_logs.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | $exchangeName = 'logs'; 8 | 9 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 10 | $connection->connect() or die("Cannot connect to the broker!\n"); 11 | $channel = new AMQPChannel($connection); 12 | $exchange = new AMQPExchange($channel); 13 | $exchange->setName($exchangeName); 14 | $exchange->setType(AMQP_EX_TYPE_FANOUT); 15 | $exchange->declare(); 16 | $queue = new AMQPQueue($channel); 17 | $queue->setFlags(AMQP_EXCLUSIVE); 18 | $queue->declare(); 19 | $queue->bind($exchangeName, ''); 20 | 21 | var_dump('[*] Waiting for messages. To exit press CTRL+C'); 22 | while (TRUE) { 23 | $queue->consume('callback'); 24 | } 25 | $connection->disconnect(); 26 | 27 | function callback($envelope, $queue) { 28 | $msg = $envelope->getBody(); 29 | var_dump(" [x] Received:" . $msg); 30 | $queue->nack($envelope->getDeliveryTag()); 31 | } 32 | 33 | -------------------------------------------------------------------------------- /demo-1/receive.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | $exchangeName = 'demo'; 8 | $queueName = 'hello'; 9 | $routeKey = 'hello'; 10 | 11 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 12 | $connection->connect() or die("Cannot connect to the broker!\n"); 13 | $channel = new AMQPChannel($connection); 14 | $exchange = new AMQPExchange($channel); 15 | $exchange->setName($exchangeName); 16 | $exchange->setType(AMQP_EX_TYPE_DIRECT); 17 | $exchange->declare(); 18 | $queue = new AMQPQueue($channel); 19 | $queue->setName($queueName); 20 | $queue->declare(); 21 | $queue->bind($exchangeName, $routeKey); 22 | 23 | var_dump('[*] Waiting for messages. To exit press CTRL+C'); 24 | while (TRUE) { 25 | $queue->consume('callback'); 26 | } 27 | $connection->disconnect(); 28 | 29 | function callback($envelope, $queue) { 30 | $msg = $envelope->getBody(); 31 | var_dump(" [x] Received:" . $msg); 32 | $queue->nack($envelope->getDeliveryTag()); 33 | } 34 | 35 | -------------------------------------------------------------------------------- /demo-2/worker.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | $exchangeName = 'demo'; 8 | $queueName = 'task_queue'; 9 | $routeKey = 'task_queue'; 10 | 11 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 12 | $connection->connect() or die("Cannot connect to the broker!\n"); 13 | $channel = new AMQPChannel($connection); 14 | $exchange = new AMQPExchange($channel); 15 | $exchange->setName($exchangeName); 16 | $exchange->setType(AMQP_EX_TYPE_DIRECT); 17 | $exchange->declare(); 18 | $queue = new AMQPQueue($channel); 19 | $queue->setName($queueName); 20 | $queue->setFlags(AMQP_DURABLE); 21 | $queue->declare(); 22 | $queue->bind($exchangeName, $routeKey); 23 | 24 | var_dump('[*] Waiting for messages. To exit press CTRL+C'); 25 | while (TRUE) { 26 | $queue->consume('callback'); 27 | $channel->qos(0,1); 28 | } 29 | $connection->disconnect(); 30 | 31 | function callback($envelope, $queue) { 32 | $msg = $envelope->getBody(); 33 | var_dump(" [x] Received:" . $msg); 34 | sleep(substr_count($msg,'.')); 35 | $queue->ack($envelope->getDeliveryTag()); 36 | } 37 | 38 | -------------------------------------------------------------------------------- /demo-4/receive_logs_direct.php: -------------------------------------------------------------------------------- 1 | 6 | */ 7 | $exchangeName = 'direct_logs'; 8 | 9 | 10 | $connection = new AMQPConnection(array('host' => '127.0.0.1', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest')); 11 | $connection->connect() or die("Cannot connect to the broker!\n"); 12 | $channel = new AMQPChannel($connection); 13 | $exchange = new AMQPExchange($channel); 14 | $exchange->setName($exchangeName); 15 | $exchange->setType(AMQP_EX_TYPE_DIRECT); 16 | $exchange->declare(); 17 | $queue = new AMQPQueue($channel); 18 | $queue->setFlags(AMQP_EXCLUSIVE); 19 | $queue->declare(); 20 | 21 | $severities = $argv; 22 | $file = $severities[0]; 23 | unset($severities[0]); 24 | if (!$severities) { 25 | var_dump("Usage:$file [info] [warning] [error]"); 26 | exit(); 27 | } else { 28 | foreach ($severities as $item) { 29 | $queue->bind($exchangeName, $item); 30 | } 31 | } 32 | 33 | 34 | var_dump('[*] Waiting for messages. To exit press CTRL+C'); 35 | while (TRUE) { 36 | $queue->consume('callback'); 37 | } 38 | $connection->disconnect(); 39 | 40 | function callback($envelope, $queue) { 41 | $msg = $envelope->getBody(); 42 | var_dump('[x]' . $envelope->getRoutingKey() . ':' . $msg); 43 | $queue->nack($envelope->getDeliveryTag()); 44 | } 45 | 46 | --------------------------------------------------------------------------------