在rabbitMQ队列上推送一个对象


Push an object on rabbitMQ queue

问题陈述:

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

拉比Q中有解决这个问题的解决方案吗?我使用的是php amqplib

这听起来有点像鸡和蛋的问题。。。您需要构建一个消息,但这需要很长时间。所以你想发送一条消息来构建消息?:(

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

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

如果您发送一个完整的文档来描述对象中的所有数据,那么您就可以用这些数据重建原始对象的传真。但这往往会产生沉重的信息,减缓rabbitmq。

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

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