Я разрабатываю приложение, состоящее из нескольких компонентов, в основном написанных на Java и Python.
Я думаю об использовании "JMS-Active MQ" в качестве промежуточного программного обеспечения, ориентированного на сообщения, для компонентов и "буферов протокола".
1) Это хороший путь? В нашем случае «размер сообщения» может превысить 10 МБ, будет ли буфер протокола по-прежнему иметь преимущества для межкомпонентной связи? Существуют ли более эффективные коммуникационные "протоколы" для кроссплатформенных приложений, которые могут обрабатывать "огромные объемы данных"?
2) Я создал Подтверждение концепции моей отправки «положительного результата протокола» в виде сообщения через «ActiveMQ», я использую пример прото-файла в руководстве по java от Google.
AddressBook.Builder book = AddressBook.newBuilder();
Person.Builder person = Person.newBuilder();
person.setName("mayank");
person.setId(2);
book.addPerson(person);
TextMessage message = session.createTextMessage();
message.setText(book.build().toString());
В другом Java-приложении я слушаю это сообщение и пытаюсь десериализовать его обратно в объект AddressBook:
public void onMessage(Message message) {
TextMessage msg = (TextMessage) message;
try {
System.out.println(msg.getText());
CodedInputStream stream =CodedInputStream.newInstance(msg.getText().getBytes());
AddressBook book = AddressBook.parseFrom(stream);
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Это вызывает исключение:
com.google.protobuf.InvalidProtocolBufferException: While parsing a protocol
message, the input ended unexpectedly in the middle of a field. This could
mean either than the input has been truncated or that an embedded message
misreported its own length.
at com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:49)
Я не знаю, что не так ..?