1、安装 延迟队列消息插件
RabbitMq官网 下载插件
2、将下载好的插件放到 RabbitMq 插件目录
备注:centos7 插件目录
/usr/lib/rabbitmq/lib/rabbitmq_server-3.9.14/plugins
3、安装插件
执行如下命令:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
查看是否安装成功:
rabbitmq-plugins list
插件列表出现延迟队列的插件即安装成功。
4、在web管理页面添加延迟交换机类型
5、发送延迟消息的主要代码:
/**
* 发送延迟消息
* @param array $data 发送的数据
* @param int $time 延迟的时间,单位秒
*/
public function sendDelayMsg(array $data, int $time = 5)
{
$delayConfig = [
'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT,
'application_headers' => new AMQPTable(['x-delay' => $time * 1000])
];
// 将要发送数据变为json字符串
$messageBody = json_encode($data, JSON_UNESCAPED_UNICODE);
$message = new AMQPMessage($messageBody, $delayConfig);
// 发送消息
$this->channel->basic_publish($message, $this->queueConfig['exchange_name'], $this->routeKey);
// 关闭连接
$this->stop();
}
测试代码
// 延迟处理
public function delayMsg()
{
$producer = new Producer('delay_queue');
$data = [
'message_type' => 2,
'order_id' => 3,
'user_id' => 3,
'message' => "发送的消息内容:您的快递已到的配送站。"
];
$producer->sendDelayMsg($data, 60);
dump("发布成功");
}