Отправка объединенных объектов по шине событий - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть несколько дорогих для создания объектов, объединенных в vert.x, и я хотел бы отправить их в другую veriment через eventbus. Когда я это делаю, есть ли способ (обработчик) сообщить мне, что объект записан в строку, чтобы я мог сбросить его и вернуться в пул?

В Netty (который используется в Vert.x) под ByteBuf вызываются retain(), вызываемые, когда к ним больше не нужно прикасаться, даже с асинхронным дизайном. Есть ли что-нибудь подобное, что я мог бы использовать в Vert.x?

1 Ответ

0 голосов
/ 18 сентября 2018

Продолжая то, что я знаю, я думаю, это зависит от того, что делает объекты "дорогими".

если дороговизну можно отнести к ресурсам, необходимым для вычисления его внутренних значений, то встроенный в EventBus обмен сообщениями запрос-ответ может подойти

(... при условии, чтообъект не просто огромный и / или глубоко вложенный)

на стороне отправителя Verticle:

  • захватите дорогой объект из пула и скомпонуйте с ним Message
  • вызовет вариант EventBus.send(), который принимает Handler для обработки ответов
  • в обработчике ответов, возвращает объект в пул

на получателеVerticle side:

  • зарегистрировать новый MessageConsumer с помощью EventBus для получения сообщений от отправителя
  • при получении нового Message, обработать дорогой объект,и затем вызовите некоторый вариант Message.reply(), чтобы сигнализировать, что работа на стороне получателя завершена

, если дороговизну можно отнести к размеру / сложности объекта, тогда общие данные могут бытьлучшая альтернатива (де) сериализацииза EventBus

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

, идущий по этому маршруту, будет идентичен описанному выше подходу со следующими исключениями:

  • вместо сериализации дорогого объекта, сохраните его в общей карте
  • sendсоответствующий ключ, в котором объект хранится у получателя Verticle

Я не уверен, есть ли более готовое к работе идиоматическое решение вашей проблемы, но если ничего другого, я надеюсь, что это вдохновляетнемного нового мышления.

...