问题陈述:
我有构建消息所需的某些对象。在我的应用程序中,构建消息是一项繁重的操作,因此我希望发布者将这些对象推送到队列中,而不是将消息推送到队列中。一旦订阅者监听队列,它将选择这些对象并构建消息。
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/