使用Symfony Messenger和Enqueue传输的开源项目教程

使用Symfony Messenger和Enqueue传输的开源项目教程

messenger-enqueue-transportUses Enqueue with Symfony's Messenger component. 项目地址:https://gitcode.com/gh_mirrors/me/messenger-enqueue-transport

项目介绍

messenger-enqueue-transport 是一个开源项目,它允许你使用Enqueue库通过Symfony Messenger组件发送和接收消息。Enqueue支持多种消息代理,如AMQP、Redis等,使得消息队列的处理更加灵活和强大。

项目快速启动

安装传输组件

首先,通过Composer安装传输组件:

composer require sroze/messenger-enqueue-transport

配置Enqueue Bundle

按照Enqueue的文档正常配置Enqueue Bundle。如果你使用的是配方,只需配置环境变量来配置默认的Enqueue传输:

# .env
###> enqueue/enqueue-bundle ###
ENQUEUE_DSN=amqp://guest:guest@localhost:5672/%2f
###< enqueue/enqueue-bundle ###

配置Messenger的传输

配置Messenger的传输(我们命名为amqp)以使用Enqueue的默认传输:

# config/packages/messenger.yaml
framework:
    messenger:
        transports:
            amqp: 'enqueue://default'

路由消息

路由需要通过消息队列传递的消息:

# config/packages/messenger.yaml
framework:
    messenger:
        routing:
            'App\Message\MyMessage': amqp

消费消息

使用以下命令消费消息:

bin/console messenger:consume amqp

应用案例和最佳实践

高级用法

配置队列和交换

在传输DSN中,你可以添加额外的配置。以下是一个常见的参考DSN:

enqueue://default?queue[name]=queue_name&topic[name]=topic_name&deliveryDelay=1800&delayStrategy=Enqueue\AmqpTools\RabbitMqDelayPluginDelayStrategy&timeToLive=3600&receiveTimeout=1000&priority=1
设置自定义消息配置

每个Enqueue传输(如AMQP、Redis等)都有其自己的消息对象,可以通过调用设置方法进行配置。但在Messenger中,你无法直接访问这些对象。相反,你可以通过TransportConfiguration间接设置这些选项:

use Symfony\Component\Messenger\Envelope;
use Enqueue\MessengerAdapter\EnvelopeItem\TransportConfiguration;

$transportConfig = (new TransportConfiguration())
    ->setDeliveryDelay(5000)
    ->addMetadata('deliveryMode', AmqpMessage::DELIVERY_MODE_PERSISTENT);

$bus->dispatch((new Envelope($message))->with($transportConfig));

典型生态项目

RabbitMQ

RabbitMQ是一个广泛使用的消息代理,支持AMQP协议。通过Enqueue和Symfony Messenger的结合,你可以轻松地在RabbitMQ上实现消息队列的功能。

Kafka

Kafka是一个高吞吐量的分布式消息系统,适用于大规模数据处理。通过Enqueue,你可以在Symfony项目中集成Kafka,实现高效的消息传递。

$this->bus->dispatch((new Envelope($message))->with(new TransportConfiguration([
    'topic' => 'test_topic_name',
    'metadata' => [
        'key' => 'foo.bar',
        'partition' => 0,
        'timestamp' => (new \DateTimeImmutable())->getTimestamp(),
        'messageId' => uniqid('kafka_', true)
    ]
])));

通过以上步骤和示例,你可以快速上手并充分利用messenger-enqueue-transport项目,实现高效的消息队列处理。

messenger-enqueue-transportUses Enqueue with Symfony's Messenger component. 项目地址:https://gitcode.com/gh_mirrors/me/messenger-enqueue-transport

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

褚艳影Gloria

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值