publish发布(生产者)

<?php
$queue  = 'time1';
$msg    = 'bar';
//生产者

try {
    $stomp = new Stomp('tcp://localhost:61613');

    while (true) {
        $stomp->send($queue, $msg." ". date("Y-m-d H:i:s"));
        sleep(1);
    }

} catch(StompException $e) {
    die('Connection failed: ' . $e->getMessage());
}

subscribe订阅(消费者)

<?php
$queue  = 'time1';

try {
    $stomp = new Stomp('tcp://localhost:61613');
    $stomp->subscribe($queue);

    while (true) {
        if ($stomp->hasFrame()) {
            $frame = $stomp->readFrame();
            if ($frame != NULL) {
                print "Received: " . $frame->body . " - time now is " . date("Y-m-d H:i:s"). "\n";
                $stomp->ack($frame); //确认接收到消息
            }
        } else {
            print "No frames to read\n";
        }
    }

} catch(\Exception $e) {
    die('Connection failed: ' . $e->getMessage());
}

消费者可以有多个(stomp没有java的jms强大)

图片显示接受的分布的非常均匀。

图

注意事项:

1、用stomp扩展存入的消息队列先行开启后,在开启消费者所有数据都能取出来。

2、用stomp扩展可以一对一收发(一个生产者一个消费者、一个队列),也可以一对多(一个生产者多个消费者、一个队列)、以上的图片就是一对多。

图

JAVA消息队列JMS设计结构

图

Last modification:January 22, 2020
如果觉得我的文章对你有用,请随意赞赏