Message Codecs
You can send any object you like across the event bus if you define and register a message codec
for it.
Message codecs have a name and you specify that name in the DeliveryOptions
when sending or publishing the message:
eventBus.registerCodec(myCodec);
DeliveryOptions options = new DeliveryOptions().setCodecName(myCodec.name());
eventBus.send("orders", new MyPOJO(), options);
If you always want the same codec to be used for a particular type then you can register a default codec for it, then you don’t have to specify the codec on each send in the delivery options:
eventBus.registerDefaultCodec(MyPOJO.class, myCodec);
eventBus.send("orders", new MyPOJO());
You unregister a message codec with unregisterCodec
.
Message codecs don’t always have to encode and decode as the same type. For example you can write a codec that allows a MyPOJO class to be sent, but when that message is sent to a handler it arrives as a MyOtherPOJO class.
Vert.x has built-in codecs for certain data types:
-
basic types (string, byte array, byte, int, long, double, boolean, short, char), or
-
some Vert.x data types (buffers, JSON array, JSON objects), or
-
types implementing the
ClusterSerializable
interface, or -
types implementing the
java.io.Serializable
interface.
Important
|
In clustered mode, You can define which classes are allowed for encoding and decoding by providing functions which inspect the name of the class: |