php监听mq消息,客户端监听服务端获取rabbitmq消息队列,rabbitmq有消息的时候客户端刷新页面才能获取到消息,监听没起到作用,请求各位大神指点迷津...

header("Content-Type:text/html;charset=utf-8");

use Workerman\Worker;

require_once __DIR__ . '/Autoloader.php';

// 注意:这里与上个例子不同,使用的是websocket协议

$ws_worker = new Worker("websocket://192.168.1.218:5556");

// 启动4个进程对外提供服务

$ws_worker->count = 4;

// 当收到客户端发来的数据后返回hello $data给客户端

$ws_worker->onMessage = function($connection, $data)

{

$data = json_decode($data, true);

$conn_arg = array(

'host' => '192.168.1.100',

'port' => '5672',

'login' => 'qifaoa',

'password' => 'qifaoa@123',

'vhost' => '/',

);

foreach ($data as $k => $v) {

$exchange = $v;//交换机

$routing_key = $v;//路由key

$queue = $v;//队列

if (empty($exchange) || empty($routing_key) || empty($queue)) {

$connection->send('参数错误');

die();

}

//创建连接和channel

$conn = new AMQPConnection($conn_arg);

if (!$conn->connect()) {

$connection->send('rabbitmq连接失败');

die();

} else {

// echo '连接成功'."\n";

}

$channel = new AMQPChannel($conn);

//创建队列

$q = new AMQPQueue($channel);

$q->setName($queue);

$q->setFlags(AMQP_DURABLE);//设置队列持久化

$q->declareQueue();//声明创建队列

$q->bind($exchange, $routing_key);//绑定交换机,指定路由键

//消息获取

$message = $q->get(AMQP_AUTOACK);//自动应答机制

//判断消息是否存在

if ($message) {

$connection->send($message->getBody());

} else {

// echo json_encode('空');

}

$conn->disconnect();//关闭

}

};

//连接关闭

$ws_worker->onclose = function($connection) {

echo "connection close\n";

};

//连接错误

$worker->onError = function($connection, $code, $msg)

{

echo "error $code $msg\n";

};

// 运行worker

Worker::runAll();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值