RabbitMQ使用场景_001_简单使用

单发单接模式

这是一个“Hello World”的消息,将用PHP编写两个程序,发送一个消息的生产者,消费者接收信息并打印出来。

在下面的图中,“P”是我们的生产和“C”是我们消费者。中间的框是一个队列,消息缓冲RabbitMQ代表消费者。

img

第一步 配置环境

1.Composer安装php-amqplib

链接 : https://github.com/php-amqplib/php-amqplib
在composer.json 中增加

{
  "require": {
      "php-amqplib/php-amqplib": "2.7.*"
  }
}

并执行 php composer.phar install

第二步 加载配置

配置文件 config.php:

require_once __DIR__.'/vendor/autoload.php';

define('HOST', 'localhost'); //RabbitMQ服务器主机IP地址
define('PORT', 5672); //RabbitMQ服务器端口
define('USER', 'guest'); // 连接RabbitMQ服务器的用户名,默认是guest
define('PASS', 'guest'); // 连接RabbitMQ服务器的用户密码
define('VHOST', '/'); //连接RabbitMQ服务器的vhost(服务器可以有多个vhost,虚拟主机,类似nginx的vhost)

//开启debug模式
define('AMQP_DEBUG', true);

第三步 发送者和接收者

我们叫消息发布者(sender)"send.php",消息接受者叫"receive.php".生产者蒋连接到RabbitMQ发送一条消息并退出
在"send.php",我们必须包含必须的库和必要的类

img

1. 生产者 send.php:
require_once __DIR__ . '/config.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

// 创建好服务器连接
$connection = new AMQPStreamConnection(HOST, PORT, USER, PASS, VHOST);
// 创建"channel"通道和声明队列名和发送消息到队列中 
$channel = $connection->channel();
//声明队列名
$queue  = 'hello';

/*
    name: 队列名称
    passive: false
    durable: true //服务器重启后队列依旧存活
    exclusive: false //队列能被其他channel访问
    auto_delete: false //channel关闭之后队列不删除
*/
$channel->queue_declare($queue, false, false, false, false);

//实例化一个消息,并设置消息持久化
$messageBody = implode(' ', array_slice($argv, 1));
$message     = new AMQPMessage($messageBody, array('content_type' => 'text/plain', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT));

//发送消息到默认交换机
$channel->basic_publish($message, '', $queue);
echo " [x] Sent '{$message}'\n";

// 最后关闭通道和连接
$channel->close();
$connection->close();
2. 接收者 receiver.php

从RabbitMQ接受消息,不同的生成者发送消息,并保持运行监听消息并打印出来。

img

require_once __DIR__ . '/config.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

// 创建好服务器连接
$connection = new AMQPStreamConnection(HOST, PORT, USER, PASS, VHOST);
// 创建"channel"通道和声明队列名和发送消息到队列中 
$channel = $connection->channel();
//声明队列名
$queue  = 'hello';

/*
    name: 队列名称
    passive: false
    durable: true //服务器重启后队列依旧存活
    exclusive: false //队列能被其他channel访问
    auto_delete: false //channel关闭之后队列不删除
*/
$channel->queue_declare($queue, false, false, false, false);

echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";


/**
 * 回调函数
 * 
 * @param \PhpAmqpLib\Channel\AMQPChannel $channel
 * @param \PhpAmqpLib\Connection\AbstractConnection $connection
 */
$callback = function($msg) {
  echo " [x] Received ", $msg->body, "\n";
};

/*
    消费消息
    queue: 制定队列
    consumer_tag: Consumer identifier
    no_local: Don't receive messages published by this consumer.
    no_ack: 服务器是否核对确认消息
    exclusive: 独占该消息,只有该channel才能消费这条消息
    nowait:
    callback: 回调函数
*/
$channel->basic_consume($queue, '', false, true, false, false, $callback);

// 循环监听回调
while(count($channel->callbacks)) {
    $channel->wait();
}

在命令行(终端)运行2个脚本

php receive.php
php send.php

消费者将打印消息从发送方通过RabbitMQ。接收者将继续运行,等待消息(使用ctrl - c来阻止它),所以尝试发送方从另一个终端上运行。

转载于:https://www.cnblogs.com/one-villager/p/rabbitmq_mode_simple.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: rabbitmq_delayed_message_exchange-20171201-3.7.x.zip是RabbitMQ的一个插件包。RabbitMQ是一个开源的消息队列中间件,用于实现异步通信和解耦应用程序之间的消息传递。 这个插件包是针对RabbitMQ版本3.7.x的,目的是提供延迟消息交换的功能。延迟消息交换是指消息可以在一定的时间延迟后再被投递到消费者,这对于某些需要延迟处理的业务场景非常有用。 使用这个插件包,可以通过声明一个类型为"x-delayed-message"的交换机,来实现延迟消息交换。在发送消息时,可以通过设置消息的headers来指定延迟的时间,RabbitMQ会根据这个时间将消息存储在内部的延迟队列中。一旦到达延迟时间,消息将从延迟队列中被取出并且发送到相应的消费者队列中。 这个插件包的安装和配置相对简单,只需要将插件包放置在RabbitMQ的插件目录中,并在RabbitMQ的配置文件中启用该插件即可。安装完毕后,就可以在RabbitMQ使用延迟消息交换功能。 总之,rabbitmq_delayed_message_exchange-20171201-3.7.x.zip是RabbitMQ的一个插件包,用于实现延迟消息交换功能,非常适用于一些需要延迟处理的业务场景使用这个插件包可以方便地在RabbitMQ中实现延迟消息交换。 ### 回答2: rabbitmq_delayed_message_exchange-20171201-3.7.x.zip 是RabbitMQ插件的一个压缩包。 RabbitMQ是一种开源的消息队列中间件,它实现了高度可靠的消息传递机制,用于在分布式系统中传递和处理消息。RabbitMQ提供了一种将应用程序的不同部分连接起来的方式,允许它们之间进行可靠的通信。 而rabbitmq_delayed_message_exchange插件是RabbitMQ的一个延迟消息交换机的插件。它允许开发人员在RabbitMQ中发送具有延迟的消息。延迟消息是指在指定的延迟时间后才能被消费者接收到的消息。通过延迟消息交换机,可以实现一些需要延迟处理的场景,如订单超时提醒、定时任务等。 这个压缩包的命名格式为rabbitmq_delayed_message_exchange-20171201-3.7.x.zip。其中,20171201表示该插件的发布日期为2017年12月01日,3.7.x代表该插件适用于RabbitMQ 3.7.x版本。 使用该插件,你需要下载这个压缩包,然后解压缩。解压后会得到一个插件文件,将该文件放置到RabbitMQ的插件目录中。之后,你需要启动或重启RabbitMQ服务,使插件生效。 通过安装rabbitmq_delayed_message_exchange插件,你可以在RabbitMQ中实现消息的延迟发送和处理。这对于需要进行一些延迟操作的应用场景非常有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值