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