gpt4 book ai didi

java - 使用 Protobuf 的 Java 中的 RabbitMQ。解析接收到的数据

转载 作者:搜寻专家 更新时间:2023-11-01 03:05:10 29 4
gpt4 key购买 nike

我目前正在使用 springAMQP 在 java 和我的 RabbitMQ 节点之间进行通信。我正在发送 Protobuf 数据。

我想将接收到的消息转换/转换/解析为相应的 ProtoClass。

这是我的转换器的片段:

@Override
protected Message createMessage(Object object, MessageProperties messageProperties) {
Preconditions.checkNotNull(object, "Object to send is null !");

if (!com.google.protobuf.Message.class.isAssignableFrom(object.getClass())) {
throw new MessageConversionException("Message wasn't a protobuf");
} else {
com.google.protobuf.Message protobuf = (com.google.protobuf.Message) object;
byte[] byteArray = protobuf.toByteArray();

messageProperties.setContentLength(byteArray.length);
messageProperties.setContentType(ProtobufMessageConverter.CONTENT_TYPE_PROTOBUF);
messageProperties.setHeader(ProtobufMessageConverter.MESSAGE_TYPE_NAME, protobuf.getDescriptorForType().getName());

return new Message(byteArray, messageProperties);
}
}

@Override
public Object fromMessage(Message message) throws MessageConversionException {

com.google.protobuf.Message parsedMessage = null;
try {
if(ProtobufMessageConverter.CONTENT_TYPE_PROTOBUF.equals(message.getMessageProperties().getContentType())) {
String typeName = getMessageTypeName(message);
Descriptors.Descriptor messageType = fileDescriptor.findMessageTypeByName(typeName);
parsedMessage = DynamicMessage.parseFrom(messageType, message.getBody());
}
} catch (Exception e) {
throw new AmqpRejectAndDontRequeueException("Cannot convert, unknown message type %s".format(getMessageTypeName(message)));
}
return parsedMessage;
}

我必须做什么才能构建对象?

这是我的原型(prototype)文件:

message queueReply {
required string identifier = 1; cycle
required uint32 keyId = 2;
required bool success = 3;
required bytes result = 4;
}

我想从 template.receiveAndConvert() 获取类 queueReply

最佳答案

找到解决方案。

DynamicMessage o = (DynamicMessage)template.receiveAndConvert("queueName");
ProtoObject request = ProtoObject.parseFrom(o.toByteArray());

关于java - 使用 Protobuf 的 Java 中的 RabbitMQ。解析接收到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25260223/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com