使用点对点(Point To Point)模型

点对点模型特点:

  • 只有一个消费者可以接收到消息
  • 不能重复消费

生产者producer.php代码:

<?phptry {  // 1.建立连接  $stomp = new Stomp("tcp://47.52.119.21:61613");  // 2.实例化类  $obj = new Stdclass();  // 3.获取数据  for($i=0; $i<3; $i++){    $obj->username = "test";    $obj->password = "123456";    $queneName   = "/queue/userReg";    // 4.发送一个注册消息到队列    $stomp->send($queneName, json_encode($obj));  }} catch (StompException $e) {  die("Connection failed: " . $e->getMessage());}

消费者1consumer1.php代码:

<?php$stomp = new Stomp("tcp://localhost:61613");$stomp->subscribe("/queue/userReg");while (true) {  //判断是否有读取的信息  if ($stomp->hasFrame()) {    $frame = $stomp->readFrame();    $data = json_decode($frame->body, true);    var_dump($data);    $stomp->ack($frame);  }}

消费者2consumer2.php代码:

<?php$stomp = new Stomp("tcp://localhost:61613");$stomp->subscribe("/queue/userReg");while (true) {  //判断是否有读取的信息  if ($stomp->hasFrame()) {    $frame = $stomp->readFrame();    $data = json_decode($frame->body, true);    var_dump($data);    $stomp->ack($frame);  }}

执行结果图如下:

使用发布/订阅(Publish Subscribe)模型

发布/订阅模型特点:

多个消费者都可以收到消息能重复消费生产者producer.php代码:

<?phptry {  // 1.建立连接  $stomp = new Stomp("tcp://47.52.119.21:61613");  // 2.实例化类  $obj = new Stdclass();  // 3.获取数据  for($i = 0; $i < 3; $i++){    $obj->username = "test";    $obj->password = "123456";    $queneName   = "/topic/userReg";    // 4.发送一个注册消息到队列    $stomp->send($queneName, json_encode($obj));  }} catch (StompException $e) {  die("Connection failed: " . $e->getMessage());}

消费者1consumer1.php代码:

<?php$stomp = new Stomp("tcp://localhost:61613");$stomp->subscribe("/topic/userReg");while (true) {  //判断是否有读取的信息  if ($stomp->hasFrame()) {    $frame = $stomp->readFrame();    $data = json_decode($frame->body, true);    var_dump($data);    $stomp->ack($frame);  }}

消费者2consumer2.php代码:

?php$stomp = new Stomp("tcp://localhost:61613");$stomp->subscribe("/topic/userReg");while (true) {  //判断是否有读取的信息  if ($stomp->hasFrame()) {    $frame = $stomp->readFrame();    $data = json_decode($frame->body, true);    var_dump($data);    $stomp->ack($frame);  }}

执行结果图如下: