昂贵的Vertx Eventbus Json处理



我有一个关于Vertx Eventbus以及如何正确使用它的问题。在Vertx:中至少有两种使用EventBus的选项

  1. 我使用Vertx提供的Eventbus方法来调用驻留在另一个Verticle上的函数。这里的好处是,我可以使用编解码器通过Eventbus传递参数。如果我只想在本地使用它,我可以直接传递引用。这里的缺点是,我需要提供一个String来定义要调用的函数。从开发人员的速度来看,这是非常糟糕的,因为现在我必须在代码库中搜索字符串才能找到我调用的函数。

  2. 我使用Vertx服务代理。这非常方便,因为它在编译时为Eventbus生成代理。这使我作为一名开发人员能够遵循我在Verticles上调用的函数,并且我根本不必处理Eventbus API。然而,它也有一些重要的缺点:现在启动时间更长,服务代理正在将所有函数属性转换为Json和Json之间的属性。这可能对应用程序性能非常不利。

我的问题:使用Eventbus的最佳方式是什么?我是不是错过了一些可以帮助我克服选项二缺点的东西?有没有我还看不到的替代方案?

感谢

正如您所发现的,主要方法是使用字符串地址。这是有很多特殊原因的,因为事件总线可能会在网络上扩展,并扩展到其他JVM、机器甚至非JVM环境,所以它们都应该能够处理消息。

正如您所提到的,为了传递琐碎的POJO,您需要一个编解码器,并且大多数编解码器都区分在本地调用,因此传递引用和在网络转换中调用。所以你不需要在这里担心。不为您定义的每种类编写编解码器的一个简单方法是使用@DataObject并让代码生成来处理它。这样,您只需发送和接收POJO,其余的都会自动完成。这是至少在一段时间前才使用序列化的(请参阅此处(。

至于Service Proxy,当前的实现总是序列化所有参数,但这个问题早就提出了。但这是你为类型安全所付出的代价(至少在某种程度上是这样(。

总之,没有最好的方式来使用eventbus,这完全取决于您在寻找什么。您可以为地址定义常量字符串并使用它们,这样您就不会在整个代码中寻找字符串,也不会使用服务代理来寻找类型安全的变体。

最新更新