php - 将对象推送到rabbitMQ队列上

标签 php rabbitmq message-queue publish-subscribe amqp

问题陈述:

我有构建消息所需的某些对象。在我的应用程序中,构建消息是一项繁重的操作,因此我希望发布者将这些对象推送到队列中,而不是将消息推送到队列中。一旦订阅者监听队列,它将选择这些对象并构建消息。

rabbitMQ有什么解决方案可以解决这个问题吗?我正在使用 php-amqplib

最佳答案

这听起来有点像先有鸡还是先有蛋的问题...您需要构建一条消息,但这需要很长时间。那么您想发送一条消息来构建消息吗? :)

根据我的经验,做到这一点的最佳方法是通过rabbitmq发送一条非常小的消息 - 一条仅包含数据库ID或其他一些少量信息的消息,可用于查找完整的数据集你需要。在队列的另一端,使用该 id/小数据集加载您需要的完整数据/对象模型,然后构建最终消息以再次通过rabbitmq推送。

问题是,您无法通过 RabbitMQ 推送对象。至少,开发人员不会将对象视为内存中的代码和数据 block 。你实际上只能通过rabbitmq推送数据。因此,您必须将对象转换为可以发送的数据结构。这意味着您要么构建完整对象的 JSON 文档,要么只从数据库发送对象的 ID。

如果您发送描述对象中所有数据的完整文档,那么您可以仅使用该数据重建原始对象的传真。但这往往会产生大量消息,从而减慢rabbitmq的速度。

如果您仅发送数据库 ID,则可以从队列另一端的数据库重新加载完整对象。这假设您有可用的数据库,并且在发送 id 和重新加载对象之间的时间内数据不会更改。

所以,需要权衡...但听起来您可能想尝试发送 id 作为消息,并在后端加载完整的对象。

关于php - 将对象推送到rabbitMQ队列上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31741554/

相关文章:

php - 卡纳达语单词在 Firefox 浏览器中显示为问号

php - 从 MySQL 中调用 PHP 函数

django - python celery : How to append a task to an old chain

javascript - ZeroMQ 的预期性能是什么?

php - PHP/MySQL约会/预订系统的最佳实践

javascript - 将大查询拆分为谷歌地图

rabbitmq - 通过Spring cloud Stream与rabbitmq binder绑定(bind)exchange进行交换

Symfony2、RabbitMQ 和 Redis throttle

rabbitmq - 在消息传递中如何使用关联 ID 的实际示例?

wcf - 将 Azure 服务总线队列与 WCF 结合使用的优点