同一局域网下 RabbitMQ发布消息
1.发布消息
<?php namespace MobileController; use ThinkController; class TestController extends Controller { /** * 同一局域网下 RabbitMQ发布消息 */ public function rabbit_1(){ //配置信息 $conn_args = [ host => 192.168.0.103,//局域网下的另一台主机地址 port => 5672,//端口号 login => admin,//新建用户admin,(默认的guest用户只能用作本地登录) password => admin,//密码 vhost=>admin,//admin绑定的虚拟主机 ]; //创建连接 $conn = new AMQPConnection($conn_args); if (!$conn->connect()) { echo "content error"; } //AMQ通道 $channel = new AMQPChannel($conn); //创建交换机对象 $ex = new AMQPExchange($channel); $e_name = admin; //交换机名 - 名字随意 $ex->setName($e_name); //发送消息 $key = rand(1,1000); $k_route = answer_list; //路由key - 名字随意 $ex->publish(test_list_.$key, $k_route); //断开连接 $conn->disconnect(); echo $key; } }
2.接收消息
<?php //配置信息 $conn_args = [ host => 192.168.0.103,//局域网下的另一台主机地址 port => 5672,//端口号 login => admin,//新建用户admin,默认的guest不能使用 password => admin,//密码 vhost=>admin,//admin绑定的虚拟主机 ]; //创建连接和channel $conn = new AMQPConnection($conn_args); if (!$conn->connect()) { die("content error".PHP_EOL); } //AMQ通道 $channel = new AMQPChannel($conn); //创建交换机 $ex = new AMQPExchange($channel); $e_name = admin; //交换机名 取用发布消息时,创建交换机对象时设置的名字 $ex->setName($e_name); $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型 $ex->setFlags(AMQP_DURABLE); //持久化 echo "Exchange Status:".$ex->declare().PHP_EOL; //创建队列 $q = new AMQPQueue($channel); $q->setFlags(AMQP_DURABLE); //持久化 echo "Message Total:".$q->declare().PHP_EOL; //绑定交换机与队列,并指定路由键 $k_route = answer_list;//路由key echo Queue Bind: .$q->bind($e_name, $k_route).PHP_EOL; //阻塞模式接收消息 echo "Message: "; while(true){ $q->consume(processMessage); $q->consume(processMessage, AMQP_AUTOACK); //自动ACK应答 } $conn->disconnect(); /** * 消费回调函数 * 处理消息 */ function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg.PHP_EOL; //处理消息 $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答 } ?>