使用 Vert.x 事件总线 'locally'(java,单个 jvm)时是否可以避免序列化?
Is it possible to avoid serialization when using the Vert.x eventbus 'locally' (java, single jvm)?
我的情况是:
- 单个 JVM
仅 - Java(我不需要通晓多种语言)
- 我不想支付序列化成本来在总线上发布不可变事件(发布对 java 对象的引用会起作用)。
我了解 vert.x 事件总线的范围比我的用例要广泛得多。
我想到了一个类似于 akka 的行为:当你去分发时,你必须为你的消息提供序列化,如果你留在本地引用就会被传递。
有什么可以让我在 Vert.x 中做到这一点的吗?
Vert.x已经有这样的优化了。当发送到同一个 JVM 时,对象不会被序列化或反序列化。
你可以在这里看到实际的代码:
https://github.com/eclipse/vert.x/blob/master/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java#L372
当您实现 MessageCodec
时,您实际上有两种方法:decodeFromWire()
和 transform()
。您可以使用最简单的方法仅实现转换:
@Override
public Object transform(Object o) {
return o;
}
我的情况是:
- 单个 JVM 仅
- Java(我不需要通晓多种语言)
- 我不想支付序列化成本来在总线上发布不可变事件(发布对 java 对象的引用会起作用)。
我了解 vert.x 事件总线的范围比我的用例要广泛得多。
我想到了一个类似于 akka 的行为:当你去分发时,你必须为你的消息提供序列化,如果你留在本地引用就会被传递。
有什么可以让我在 Vert.x 中做到这一点的吗?
Vert.x已经有这样的优化了。当发送到同一个 JVM 时,对象不会被序列化或反序列化。
你可以在这里看到实际的代码: https://github.com/eclipse/vert.x/blob/master/src/main/java/io/vertx/core/eventbus/impl/EventBusImpl.java#L372
当您实现 MessageCodec
时,您实际上有两种方法:decodeFromWire()
和 transform()
。您可以使用最简单的方法仅实现转换:
@Override
public Object transform(Object o) {
return o;
}