AMQP 1.0 Qpid BytesMessage большая полезная нагрузка

Я использую клиентскую Java-библиотеку qpid (версия 0.32) для интеграции AMQP 1.0.

Мне нужно передать массив байтов (менее 5 МБ), но это сообщение никогда не доставляется подписчикам. Я записал кадры через wirehark, и кадры передачи помечены как [TCP Window Full]. Библиотека, вероятно, не разделяет полезную нагрузку. Код правильный? Что мне нужно настроить?

Брокер: Apache Apollo 1.7.1 (конфигурация по умолчанию)

pom.xml

    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-jms_1.1_spec</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.qpid</groupId>
        <artifactId>qpid-amqp-1-0-client-jms</artifactId>
        <version>0.32</version>
    </dependency>
    <dependency>
        <groupId>org.apache.qpid</groupId>
        <artifactId>qpid-amqp-1-0-client</artifactId>
        <version>0.32</version>
    </dependency>
    <dependency>
        <groupId>org.apache.qpid</groupId>
        <artifactId>qpid-amqp-1-0-common</artifactId>
        <version>0.32</version>
    </dependency>

Код Java

  ConnectionFactoryImpl amqpFactory = new ConnectionFactoryImpl(...);
  ConnectionImpl connection = amqpFactory.createConnection();
  connection.start();
  SessionImpl session = connection.createSession(...);

  MessageProducerImpl producer = session.createProducer(new TopicImpl("topic://test"));
  BytesMessageImpl bytesMessage = session.createBytesMessage();

  //generate sample data
  StringBuilder s = new StringBuilder();
  for (int i = 0; i < 10000; i++) {
       s.append(UUID.randomUUID().toString());
  }

  bytesMessage.writeBytes(s.toString().getBytes());
  producer.send(bytesMessage);

person Stefan    schedule 27.04.2018    source источник
comment
Из вопроса неясно, какого брокера вы используете или что происходит на уровне проводов, поэтому было бы сложно ответить на ваши вопросы, хотя первый ответ, который нужно дать, - это то, что клиент устарел.   -  person Tim Bish    schedule 27.04.2018
comment
@TimBish Хорошо. Я обновил свой вопрос с брокером и зависимостями. Устарела вся библиотека или только ее версия? Вы знаете лучший клиент для java?   -  person Stefan    schedule 28.04.2018


Ответы (1)


Итак, вы в основном использовали все устаревшие части программного обеспечения AMQP, о которых я знаю, поэтому я предполагаю, что ваша проблема связана с одной из старых и не поддерживаемых частей программного обеспечения.

ActiveMQ Apollo устарел и не обслуживается уже несколько лет, вместо этого вам следует использовать ActiveMQ Artemis, который является самый активный брокер в проекте ActiveMQ.

Для клиента AMQP 1.0 JMS вы должны использовать клиент Qpid JMS, который реализует текущая спецификация отображения AMQP -> JMS и активно поддерживается.

person Tim Bish    schedule 28.04.2018
comment
Замечательно, рада это слышать! - person Tim Bish; 29.04.2018