Blob 消息

功能 > 消息功能 > Blob 消息

Blob 消息

现在常见的需求是发送大量文件供消费者处理。人们希望利用消息代理的功能,例如可靠的、事务性的负载均衡队列,并使用智能路由,但仍然需要处理大型逻辑文件。

因此,我们引入了 BlobMessage API,它允许通过某些带外传输机制发送大型 BLOB(二进制大型对象)。可能的带外机制可能是 HTTP、FTP、SCP 或其他点对点协议。

现在,ActiveMQSession 上有新的 createBlobMessage() 方法,可用于发送 BLOB。

发送 BlobMessages

您可以在 JMS 网络中发送一个 URL,例如位于某个共享文件系统或 Web 服务器上的文件或 URL,使用以下代码:

BlobMessage message = session.createBlobMessage(new URL("http://some.shared.site.com");
producer.send(message);

或者,如果您是在客户端动态创建文件或流,您可能希望将文件上传到代理或某些服务器(Jetty、FTP、WebDav 或其他)。在这种情况下,您将使用以下方法之一:

// lets use a local file
BlobMessage message = session.createBlobMessage(new File("/foo/bar");
producer.send(message);

// lets use a stream
InputStream in = ...;
BlobMessage message = session.createBlobMessage(in);
producer.send(message);

接收 BlobMessages

一个 BlobMessage 是一个常规的 JMS 消息,因此可以像接收任何其他消息一样接收它…

public class MyListener implements MessageListener {
  public void onMessage(Message message) {
    if (message instanceof BlobMessage) {
      BlobMessage blobMessage = (BlobMessage) message;
      InputStream in = blobMessage.getInputStream();

      // process the stream...
    }
  }
}

配置 BLOB 传输策略

您可以显式地为 ActiveMQConnectionFactory、ActiveMQConnection 或 ActiveMQSession 配置 BlobTransferPolicy。通常是在工厂中通过 Java 代码或 Spring 完成的。

您可以使用 连接配置 URI 通过 URI 配置这些内容。

例如,您可以通过以下方式连接到代理,同时指定要使用的 uploadUrl:

tcp://127.0.0.1:61616?jms.blobTransferPolicy.uploadUrl=http://foo.com

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 获得许可。