package com.unmi.jms;
import java.io.File;
import javax.jms.*;
import javax.swing.JFileChooser;
import org.apache.activemq.*;
/**
* 通过 ActiveMQ 发送文件的程序
* @author Unmi
*/
public class FileSender {
/**
* @param args
* @throws JMSException
*/
public static void main(String[] args) throws JMSException {
// 选择文件
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("请选择要传送的文件");
if (fileChooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION) {
return;
}
File file = fileChooser.getSelectedFile();
// 获取 ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://10.80.38.10:61616?jms.blobTransferPolicy.defaultUploadUrl=http://10.80.38.10:8161/fileserver/");
// 创建 Connection
Connection connection = connectionFactory.createConnection();
connection.start();
// 创建 Session
ActiveMQSession session = (ActiveMQSession) connection.createSession(
false, Session.AUTO_ACKNOWLEDGE);
// 创建 Destination
Destination destination = session.createQueue("File.Transport");
// 创建 Producer
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 设置为非持久性
// 设置持久性的话,文件也可以先缓存下来,接收端离线再连接也可以收到文件
// 构造 BlobMessage,用来传输文件
BlobMessage blobMessage = session.createBlobMessage(file);
blobMessage.setStringProperty("FILE.NAME", file.getName());
blobMessage.setLongProperty("FILE.SIZE", file.length());
System.out.println("开始发送文件:" + file.getName() + ",文件大小:"
+ file.length() + " 字节");
// 7. 发送文件
producer.send(blobMessage);
System.out.println("完成文件发送:" + file.getName());
producer.close();
session.close();
connection.close(); // 不关闭 Connection, 程序则不退出
}
}
3. 编写接收文件的程序 FileReceiver.java
package com.unmi.jms;
import java.io.*;
import javax.jms.*;
import javax.jms.Message;
import javax.swing.*;
import org.apache.activemq.*;
public class FileReciever {
/**
* @param args
* @throws JMSException
*/
public static void main(String[] args) throws JMSException {
// 获取 ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://10.80.38.10:61616");
// 创建 Connection
Connection connection = connectionFactory.createConnection();
connection.start();
// 创建 Session
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
// 创建 Destinatione
Destination destination = session.createQueue("File.Transport");
// 创建 Consumer
MessageConsumer consumer = session.createConsumer(destination);
// 注册消息监听器,当消息到达时被触发并处理消息
consumer.setMessageListener(new MessageListener() {
// 监听器中处理消息
public void onMessage(Message message) {
if (message instanceof BlobMessage) {
BlobMessage blobMessage = (BlobMessage) message;
try {
String fileName = blobMessage.getStringProperty("FILE.NAME");
System.out.println("文件接收请求处理:" + fileName + ",文件大小:"
+ blobMessage.getLongProperty("FILE.SIZE")+ " 字节");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("请指定文件保存位置");
fileChooser.setSelectedFile(new File(fileName));
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
OutputStream os = new FileOutputStream(file);
System.out.println("开始接收文件:" + fileName);
InputStream inputStream = blobMessage.getInputStream();
//写文件,你也可以使用其他方式
byte[] buff = new byte[256];
int len = 0;
while ((len = inputStream.read(buff)) > 0) {
os.write(buff, 0, len);
}
os.close();
System.out.println("完成文件接收:" + fileName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
}
}
分享到:
相关推荐
2. **JMS 使用 ActiveMQ 传送文件.doc** - 这个文档应该直接涵盖了如何使用ActiveMQ进行文件传输的具体步骤,可能包括了创建消息、设置目的地、发送和接收文件的代码示例,以及如何处理错误和异常的情况。...
在与ActiveMQ集成时,Uploadify的服务器端处理脚本需要与ActiveMQ进行交互,通常是发送一个包含文件信息的消息到ActiveMQ队列或主题。 2. **ActiveMQ配置**:在ActiveMQ中,我们需要创建一个特定的队列或主题来接收...
本篇将详细探讨如何使用C#与ActiveMQ进行交互,尤其是如何接收文件流。我们将从基础概念、环境配置、C#客户端库介绍、接收文件流的步骤以及示例代码等方面进行深入讲解。 首先,理解ActiveMQ的基本工作原理至关重要...
activemq-web-console的默认使用方式是通过在activemq.xml中导入jetty.xml配置一个jetty server来实现的...3.还有一个fileserver,用来支持通过activemq发送文件时的中转服务器。blob message时配置的http文件服务器。
在ActiveMQ中,发送和接收消息是一个核心功能,它允许应用程序之间进行异步通信,提高系统的可扩展性和解耦性。 在ActiveMQ中发送消息,通常涉及以下步骤: 1. **创建ConnectionFactory**:ConnectionFactory是...
本压缩包“activeMQ收发工具.rar”包含了用于测试和操作ActiveMQ的实用工具,主要是一个jar包文件,方便用户在安装了Java Development Kit (JDK) 的环境中运行。 ActiveMQ收发工具的核心功能是通过Java应用程序发送...
**ActiveMQ 使用 SSL 加密文件 Demo** ActiveMQ 是一个开源的消息代理服务器,它遵循 Java Message Service(JMS)规范,提供了可靠的消息传递功能。在实际的生产环境中,为了确保消息传输的安全性,我们通常会使用...
描述中的"activemq 传送数据流发送文件"意味着我们将文件的内容转换为数据流,并通过ActiveMQ进行传输。这涉及到文件的读取和流操作,如使用`FileStream`读取文件,然后将`FileStream`转换为`MemoryStream`,最后将`...
这篇"ActiveMQ学习笔记之九--发送消息到队列中"主要探讨的是如何通过编程方式向ActiveMQ队列发送消息,这对于理解和应用消息中间件至关重要。 首先,我们要理解ActiveMQ中的队列(Queue)概念。队列是一种先进先出...
2. **配置ActiveMQ**: 可以通过web管理界面(默认http://localhost:8161/admin)来创建Topic或Queue,也可以在配置文件(conf/activemq.xml)中预先配置。 **二、Spring配置** 1. **JMS配置**: 在Spring的配置文件...
3. 配置ActiveMQ的配置文件(如conf/activemq.xml),根据需求调整服务器端口、存储设置、网络连接等参数。 4. 启动ActiveMQ服务,通常通过执行bin目录下的启动脚本(如Windows上的activemq.bat或Linux上的./bin/...
对于比较小的文件,简单的处理方式是先读取所有的文件成byte[],然后使用ByteMessage,把文件数据发送到broker,像正常的message一样处理。
ActiveMQ作为一个开源的消息中间件,被广泛用于实现消息队列和发布/订阅模式,它允许应用将非实时任务如邮件发送等操作放到后台处理,从而提升系统的响应速度。在本项目中,ActiveMQ与SpringMVC框架结合,实现了邮件...
在本文中,我们将深入探讨如何使用ActiveMQ发送和接收基于protobuf(Protocol Buffers)协议的消息,同时也会介绍如何进行ActiveMQ的简化封装和配置自动重连机制。 首先,protobuf是Google开发的一种数据序列化协议...
ActiveMQ是Apache软件基金会开发的一个开源消息传递系统,它实现了Java Message Service (JMS) API,使得应用程序可以发送和接收各种类型的消息。ActiveMQ支持多种协议,包括OpenWire、AMQP、STOMP、XMPP、MQTT等,...
在本文中,我们将深入探讨如何使用SpringBoot、ActiveMQ和MQTT来实现消息的发送与接收。这是一个典型的分布式系统中的消息通信场景,其中SpringBoot作为应用程序框架,ActiveMQ作为消息中间件,而MQTT(Message ...
KahaDB是一个专门为ActiveMQ设计的嵌入式日志文件系统,能够提供高效且可靠的消息持久化服务。 - **KahaDB的工作原理**:KahaDB采用追加的方式写入消息到磁盘上的日志文件中。当消息被发送到Broker时,会先写入到...
在本文中,我们将深入探讨如何使用SpringBoot框架与Apache ActiveMQ集成,以便实现实时的消息发送和接收功能。首先,让我们简要了解一下SpringBoot和ActiveMQ。 **SpringBoot简介** SpringBoot是Spring框架的一个...
在“ftpSever\derby\ActiveMQ”这个场景中,我们可以想象这样的工作流程:用户通过FTP Server上传文件,FTP Server接收到文件后,可以调用后台的Java服务来处理这些文件。这个Java服务可能连接到Derby数据库,将文件...
4. 日志聚合:将分散的日志消息集中通过ActiveMQ发送到日志分析系统,便于统一管理和分析。 5. 数据同步:在分布式系统中,ActiveMQ可以用于不同节点间的数据同步和复制。 三、使用ActiveMQ v6.0.1 1. 安装部署:...