1.简单的使用可以参照官方文档的AMQP组件:https://hyperf.wiki/2.1/#/zh-cn/amqp
2.安装过程参照:https://www.linuxprobe.com/install-rabbitmq-on-centos-7.html
为了防止博客博主关闭博客,写下简要安装步骤
先安装erlang语言,再安装RabbitMQ
到:https://bintray.com/rabbitmq/rpm/erlang 安装erlang
到:https://www.rabbitmq.com/install-rpm.html#downloads 下载rpm文件
rpm -Uvh erlang-23.2.4-1.el7.x86_64.rpm
yum install erlang
yum install rabbitmq-server-3.8.12-1.el7.noarch.rpm
3.启动rabbitmq:
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
systemctl status rabbitmq-server
rabbitmq-plugins enable rabbitmq_management
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”
可以到 http://localhost:15672/ 访问rabbitMQ页面
重置rabbitMQ:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”
4.接下来才是我们业务所需的代码,因为想实现延时队列,这里需要用到ttl+死信的原理,但是目前先开启配置以后,再注释配置,再换个队列名字就能生效。
原理应该是每次创建死信队列的时候需要先判断有没有这些配置,没有的话配置好以后下次不再重复配置,这样是可以生效的。
明天再试试,搞清楚再来更新。
先贴上死信消费的代码:
declare(strict_types=1);
namespace App\Amqp\Consumer;
use Hyperf\Amqp\Result;
use Hyperf\Amqp\Annotation\Consumer;
use Hyperf\Amqp\Message\ConsumerMessage;
use PhpAmqpLib\Message\AMQPMessage;
use Hyperf\Amqp\Builder\QueueBuilder;
/**
* @Consumer(exchange="dlx", routingKey="dlx", queue="dlx2", name ="DlxConsumer", nums=1)
*/
class DlxConsumer extends ConsumerMessage
{
public function consumeMessage($data, AMQPMessage $message): string
{
var_dump("DLX",date('Y-m-d H:i:s'),$data);
return Result::NACK;
}
public function getQueueBuilder(): QueueBuilder
{
$result = (new QueueBuilder())->setQueue($this->getQueue())
->setArguments([
'x-message-ttl' => ['I', 10 * 1000],
'x-dead-letter-exchange' => ['S', 'hyperf'],
'x-dead-letter-routing-key' => ['S', 'hyperf'],
]);
// var_dump("DLX",date('Y-m-d H:i:s'));
return $result;
}
}