AMQP 1.0 Qpid BytesMessage 大负载

AMQP 1.0 Qpid BytesMessage large payload

我正在使用 qpid 客户端 Java 库(版本 0.32)来集成 AMQP 1.0。

我必须传输一个字节数组(小于 5mb),但此消息从未传递给订阅者。我通过 wireshark 记录了帧,传输帧标记为 [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);

所以您基本上已经找到了我所知道的每一个已弃用的 AMQP 软件,所以我猜您的问题来自一个旧的且未维护的软件。

ActiveMQ Apollo 已被弃用且无人维护好几年了,您应该使用 ActiveMQ Artemis,它是 ActiveMQ 项目中最活跃的代理。

对于 AMQP 1.0 JMS 客户端,您应该使用 Qpid JMS 客户端,它实现了当前的 AMQP -> JMS 映射规范并得到积极维护。