我有一个围绕代理设计的系统,这样我的生产者使用 Java,消费者使用 Go。
我正在使用 apache-pulsar 作为我的经纪人
Java - 生产者
MessageJava 类在发送到 pulsar 之前转换为字节数组:MessageJava 类的对象调用同一类中定义的getBytes()方法将其转换为 byte[],然后将该数组发送到 apache-pulsar
class MessageJava {
String id;
int entityId;
Date timestamp;
public byte[] getBytes() throws Exception{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
oos.flush();
return bos.toByteArray();
}
}
我的消费者是用 Go 编写的。
去 - 消费者
从 pulsar 读取字节数组并使用 ConvertAfterReceiving 方法 [定义如下] 转换为 MessageGo 结构,我使用gob进行解码:
type MessageGo struct {
Id string
EntityId int
Timestamp time.Time
}
func ConvertAfterReceiving(msg pulsar.Message) *MessageGo {
payload := msg.Payload()
messageBytes := bytes.NewBuffer(payload)
dec := gob.NewDecoder(messageBytes)
var message MessageGo
err := dec.Decode(&message)
if err != nil {
logging.Log.Error("error occurred in consumer while decoding message:", err)
}
return &message
}
问题是我无法解码 byte[] 并将其转换为 MessageGo 结构。它显示错误编码的无符号整数超出范围
我尝试将 MessageJava.entityId 更改为 short/long 并将 MessageGo.EntityId 更改为 int8/int16/int32/int64/uint8/uint16/uint32/uint64 [所有排列],但都是徒劳的。