【问题标题】:Push an object on rabbitMQ queue在rabbitMQ队列上推送一个对象
【发布时间】:2015-10-22 20:38:53
【问题描述】:

问题陈述:

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

rabbitMQ 有解决这个问题的方法吗?我正在使用 php-amqplib

【问题讨论】:

  • 向我们展示你的尝试......我们不是你的代码猴子 :)

标签: php rabbitmq message-queue publish-subscribe amqp


【解决方案1】:

这听起来有点像先有鸡还是先有蛋的问题……您需要构建消息,但这需要很长时间。所以你想发送消息来构建消息? :)

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2014-06-07
    • 2018-04-10
    • 2016-08-13
    相关资源
    最近更新 更多