需求:
在通常的微服务体系中,服务之间需要频繁的传递消息。
在基于Kafka的消息中,仅仅支持部分简单的类型如:String,Integer
单通常使用中,需要传递到复杂对象,数组,队列等。
现在需要实现kafka能够传递各种对象。
实现方案:
现在服务之间使用JSONObject传递,因为JSON可以很容易的转换为String,而String的序列化和反序列化已经被支持。
范例:
序列化:
public class JsonSerialize implements Serializer<JSONObject> {
@Override
public void configure(Map<String, ?> configs, boolean isKey) {
}
@Override
public byte[] serialize(String topic, JSONObject data) {
try {
return data.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
@Override
public void close() {
}
}
反序列化
public class JsonDeserialize implements Deserializer<JSONObject> {
@Override
public void configure(Map<String, ?> configs, boolean isKey) {
}
@Override
public JSONObject deserialize(String topic, byte[] data) {
JSONObject obj = null;
try {
obj = new JSONObject(new String(data,"UTF-8"));
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return obj;
}
@Override
public void close() {
}
}
其他Producer和Consumer的代码略,网上有很多。
下一个:
如何设计微服务的消息框架