Выдвинуть объект в очередь rabbitMQ

Постановка задачи:

У меня есть определенные объекты, которые необходимы для создания сообщения. В моем приложении создание сообщения является тяжелой операцией, поэтому вместо того, чтобы помещать сообщение в очередь, я хочу, чтобы мой издатель помещал эти объекты в очередь. Как только абонент прослушает очередь, он выберет эти объекты и создаст сообщение.

Есть ли какое-нибудь решение в rabbitMQ для решения этой проблемы? Я использую php-amqplib

2

Решение

это немного похоже на проблему курицы и яйца … вам нужно создать сообщение, но это занимает много времени. так вы хотите отправить сообщение, чтобы оно было построено? 🙂

По моему опыту, лучший способ сделать это — отправить очень маленькое сообщение через rabbitmq — сообщение, содержащее только идентификатор базы данных или другой небольшой объем информации, который можно использовать для поиска полного набора данных, который вам нужен. на других концах очереди используйте этот набор данных id / small, чтобы загрузить всю необходимую модель данных / объектов, а затем приступить к созданию окончательного сообщения для повторного прохождения rabbitmq.

Дело в том, что вы не можете протолкнуть объект через RabbitMQ. по крайней мере, разработчики не воспринимают объекты как куски кода и данных в памяти. Вы действительно можете только протолкнуть данные через rabittmq. Итак, вы должны преобразовать свой объект в структуру данных, которая может быть отправлена. это означает, что вы либо создаете документ JSON из полного объекта, либо просто отправляете идентификатор объекта из базы данных.

если вы отправите полный документ, описывающий все данные в объекте, то вы сможете восстановить факсимиле исходного объекта только с этими данными. но это имеет тенденцию делать тяжелые сообщения, которые замедляют rabbitmq.

если вы отправляете только идентификатор базы данных, вы можете повторно загрузить полный объект из базы данных на другом конце очереди. это предполагает, что у вас есть доступная база данных, и что данные не изменятся за время между отправкой идентификатора и перезагрузкой объекта.

Итак, есть компромиссы … но звучит так, как будто вы можете попытаться отправить идентификатор в качестве сообщения и загрузить полный объект на серверную часть.

2

Другие решения

Других решений пока нет …