В настоящее время я использую 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;
}
Что мне нужно сделать, чтобы иметь возможность построить объект?
Вот мой прото файл:
message queueReply {
required string identifier = 1; cycle
required uint32 keyId = 2;
required bool success = 3;
required bytes result = 4;
}
Я хотел бы получить класс queueReply из template.receiveAndConvert()
MessageListener
здесь. - person Adam Arold   schedule 19.10.2016fileDescriptor
в вашем коде? - person Adam Arold   schedule 19.10.2016