vert.x 事件总线的消息编解码器示例。
我有一个用例,我想注册我的自定义对象以将其发送到事件总线上。为此,我必须实现消息编解码器类。我想知道是否可以在与事件总线同名?如果不是,将多个自定义对象注册为编解码器的正确方法是什么。
最佳答案
如果您不使用集群EventBus,那么您可以像这样实现每个编解码器:
class IdentityCodec implements MessageCodec {
private final Class aClass;
public IdentityCodec(Class aClass) {
this.aClass = aClass;
}
@Override
public void encodeToWire(Buffer buffer, Object o) {
}
@Override
public Object decodeFromWire(int pos, Buffer buffer) {
return null;
}
@Override
public Object transform(Object o) {
return o;
}
@Override
public String name() {
return aClass.getName() + "Codec";
}
@Override
public byte systemCodecID() {
return -1;
}
}
这里重要的部分是每个编解码器都必须有一个唯一的名称,因此我根据类名生成它。
然后将其注册为默认编解码器:
vertx.eventBus().registerDefaultCodec(A.class, new IdentityCodec(A.class));
vertx.eventBus().registerDefaultCodec(B.class, new IdentityCodec(B.class));
可能有更好的方法来泛化它,但如果没有看到你的代码,就无法判断。
关于java - 在 vert.x 上使用事件总线注册编解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59775459/