我在Vert.x Verticle中汇集了一些创建昂贵的对象,我想通过事件总线将它们发送到另一个Verticle。当我这样做时,是否有一种方法(处理程序)告诉我该对象已被写入行中,因此我可以重置它并返回到池中?
在Netty(在Vert.x中使用)中,ByteBuf
被retain()
调用,即使使用异步设计也不再需要触摸它们。我可以在Vert.x中使用类似的东西吗?
答案 0 :(得分:1)
继续我所知道的,我认为这取决于使对象“昂贵”的原因。
EventBus
的内置请求-响应消息传递可能是合适的(...假设对象不只是巨大的和/或深度嵌套的)
在发件人Verticle
端:
Message
EventBus.send()
的变体,该变体接受Handler
来处理回复在接收方Verticle
端:
MessageConsumer
注册一个新的EventBus
,以接收来自发件人的消息Message
到达时,处理昂贵的对象,然后调用Message.reply()
的某些变体来表示接收方的工作已完成EventBus
上对它进行反序列化的更好选择。如果您不熟悉共享地图功能,可以在docs中进行阅读。
走这条路线与上述方法相同,除了以下例外:
Verticle
我不确定是否有针对您的问题的更框架就绪的惯用解决方案,但如果没有其他希望,我希望它能激发一些新的想法。