美文网首页
RabbitMQ+PHP 教程一(Hello World)

RabbitMQ+PHP 教程一(Hello World)

作者: 茶艺瑶 | 来源:发表于2018-04-26 23:55 被阅读655次

    视频

    介绍

    RabbitMQ是一个消息代理器:它接受和转发消息。你可以把它当作一个邮局:当你把邮件放在信箱里时,你可以肯定邮差先生最终会把邮件送到你的收件人那里。在这个比喻中,RabbitMQ就是这里的邮箱,邮局和邮差。

    "Hello World"

    在本教程的这一部分中,我们将用PHP编写两个程序;一个生产者发送一条消息,一个用户接收消息并将它们打印出来。我们会PHP amqplib API的忽略一些细节,集中在这个非常简单的事情刚刚开始。这是一个“Hello World”的消息传递。

    在下图中,“p”是我们的生产商,“C”是我们的消费者。在中间的框是一个队列的消息缓冲区,RabbitMQ保持代表的消费。

    image.png

    PHP amqplib客户端库[当然你也可以使用 PHP 官方的 amqp 扩展]

    添加composer.json:

    {
        "name": "molei/rabbit-mq",
        "require": {
            "php-amqplib/php-amqplib": ">=2.6.1"
        }
        ,"repositories": {
            "packagist": {
                "type": "composer",
                "url": "https://packagist.phpcomposer.com"
            }
        }
    }
    
    

    生产者(消息发送方)

    require_once __DIR__ . '/vendor/autoload.php';
    use PhpAmqpLib\Connection\AMQPStreamConnection;
    use PhpAmqpLib\Message\AMQPMessage;
    

    现在我们能创建一个连接服务器的Connection:

    $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
    $channel = $connection->channel();
    
    

    然后我们像队列中发送一个消息对象

    $msg = new AMQPMessage('Hello World!');
    $channel->basic_publish($msg,'','hello');
    //websocket
    echo " [x] Sent 'Hello World!'\n";
    

    最后,我们关闭通道和连接;

    $channel->close();
    $connection->close();
    

    上面我们完成了send.php.

    接下来我们完成任务处理方的代码

    require_once __DIR__ . '/vendor/autoload.php';
    use PhpAmqpLib\Connection\AMQPStreamConnection;
    

    RabbitMQ是可以支持异步处理的。
    我这里使用的是一个异步处理的实现方法

    $callback = function($msg) {
        echo " [x] Received ", $msg->body, "\n";
    };
    
    $channel->basic_consume('hello', '', false, true, false, false, $callback);
    
    while(count($channel->callbacks)) {
        $channel->wait();
    }
    

    看到这里大家应该明白怎么使用RabbitMQ去做一下异步的工作了吧!
    你只要发布消息后,在对应的事件写处理的回调就可以了。注意 必须一样的名称,必然我们发布者使用的hello。那消费者也必须使用hello来做响应,这个有点像Socket.io的一个原理。

    这个和laravel的队列使用区里市差不多的,这部格RabbitMQ的队列可以做到更高的管理。不过使用RabbitMQ的话,你可以和更多的系统一起协同工作。RPC一种低成本携程模式。

    相关文章

      网友评论

          本文标题:RabbitMQ+PHP 教程一(Hello World)

          本文链接:https://www.haomeiwen.com/subject/zisvlftx.html