Kafka传递JSONObject 对象

需求:
在通常的微服务体系中,服务之间需要频繁的传递消息。
在基于Kafka的消息中,仅仅支持部分简单的类型如:String,Integer
单通常使用中,需要传递到复杂对象,数组,队列等。
现在需要实现kafka能够传递各种对象。

实现方案:
现在服务之间使用JSONObject传递,因为JSON可以很容易的转换为String,而String的序列化和反序列化已经被支持。

范例:
序列化:

public class JsonSerialize implements Serializer {

    @Override
    public void configure(Map 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 {

    @Override
    public void configure(Map 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的代码略,网上有很多。

下一个:
如何设计微服务的消息框架

你可能感兴趣的:(Kafka传递JSONObject 对象)