我有一个垂直点,用于创建事件总线使用者,如下所示:
public void start() {
vertx.eventBus().consumer(ADDRESS_REQUEST, this::handleRequestMessage);
}
private void handleRequestMessage(Message<VWApiConversation> msg) {
VWApiConversation conversation = msg.body();
}
但是当向此地址发送消息时:
vertx.eventBus().send(VehicleStateCoordinatorVerticle.ADDRESS_REQUEST, conversation, deliveryOptions, res -> {
。
我收到错误:
java.lang.IllegalArgumentException: No message codec for type: class com.vulog.vwgateway.model.VWApiConversation
我错过了什么吗?
默认情况下,Vert.x 支持序列化 JVM 原语、Buffer
s 和JsonObject
s。 对于其他自定义类型,您需要编写自己的消息编解码器。
以下是一些可能会有所帮助的文档:
- 官方文档对此有一些说明。 标题为"消息类型"的部分将特别感兴趣。
- 下面是实现
MessageCodec
示例。(此代码段中未显示通过EventBus.registerCodec()
注册编解码器。
为了我的口味,我一直使用JsonObject
作为消息传递媒介(因为我的设置使我能够这样做(。 为每种域类型编写自定义(反(序列化程序似乎很麻烦。