使用ActiveMQ 传输文件 以及使用Jetty搭建内嵌文件服务器
使用Active发送文件
ActiveMq 本身提供对于传输文件的支持。
1. 直接传输文件: 使用connection.createOutputStream 的形式。这种方式适合小文件。不能传输大文件。
2. BlobMessage:(Binary Large OBjects) 这种方式可以传输大文件。其本质是发送一个BlobMessage时,先将文件传输到文件服务器上,然后接受消息时再从文件服务器上取。这样我们在mq里面传输的实际上只是一个文件ID
本文介绍的是第二种方法,MQ本身自带jetty启动方式。
ActiveMQConnectionFactory fac = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616?jms.blobTransferPolicy.defaultUploadUrl=http://localhost:8161/fileserver/");
Connection createConnection = fac.createConnection();
createConnection.start();
ActiveMQSession activeMQSession = (ActiveMQSession) createConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
File file = new File("D:\\1.html");
BlobMessage createBlobMessage = activeMQSession.createBlobMessage(file);
Queue createQueue = activeMQSession.createQueue("test.blobmessage");
MessageProducer createProducer = activeMQSession.createProducer(createQueue);
createProducer.send(createBlobMessage);
createConnection.close();
这样就可以发送一个 BlobMessage 消息,接收端接收过程也差不多。就不重述了。
但是当我使用ActiveMQ自带的服务器做文件服务器时,文件上传时报:PUT was not successful: 401 Unauthorized 异常。于是决定自己搭建基于jetty的文件服务器
搭建jetty服务器
1. 首先加入jetty的依赖或者引入jetty的jar包:
<dependency>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all-server</artifactId>
<version>7.6.4.v20120524</version>
</dependency>
2. 从 http://svn.apache.org/repos/asf/activemq/trunk/activemq-fileserver/ 中svn得到MQ提供文件服务的三个类。引入自己的项目
3. 新建自己的Server类,加入如下代码:
Server server = new Server(8080);
ServletContextHandler handler = new ServletContextHandler ();
handler.setResourceBase(".");
handler.setContextPath("/fileserver");
System.out.println(handler.getServletContext().getRealPath("/"));
handler.addFilter(org.apache.activemq.util.FilenameGuardFilter.class, "/*", DispatcherType.FORWARD.ordinal() );
handler.addFilter(org.apache.activemq.util.RestFilter.class, "/*", DispatcherType.FORWARD.ordinal() );
ServletHolder defaultServlet = new ServletHolder();
defaultServlet.setName("DefaultServlet");
defaultServlet.setClassName("org.eclipse.jetty.servlet.DefaultServlet");
handler.addServlet(defaultServlet, "/*");
server.setHandler( handler );
server.start();
4. 启动Server类。注意修改新建ConnectionFactory时的URL设置端口。上面服务器设置的是8080所以链接地址应为:
tcp://localhost:61616?jms.blobTransferPolicy.defaultUploadUrl=http://localhost:8080/fileserver/
5. 这样就完成了自己搭建一个MQ文件服务器的过程。再次发送文件和接受文件,成功!
相关Jetty内嵌服务器参考链接: http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty
本文MQ的内容参考 http://blog.csdn.net/kimmking/article/details/9421343
使用ActiveMQ 传输文件 以及使用Jetty搭建内嵌文件服务器的更多相关文章
- 使用jetty作为内嵌服务器启动项目
http://blog.csdn.net/robinpipi/article/details/7557035 需求:把jetty作为内嵌的一个服务器,直接启动,web项目不用部署在应用服务器中.在网上 ...
- FTP相关、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
1.FTP相关(file transfer protocol,文件传输协议) 2.用vsftpd搭建ftp安装:yum install vsftpd -y创建一个虚拟用户:useradd vft ...
- xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
6月25日任务 15.4 xshell使用xftp传输文件15.5 使用pure-ftpd搭建ftp服务扩展vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.co ...
- Linux centosVMware xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务
一.xshell使用xftp传输文件 Ctrl+Alt+F 弹出 下载进入 填写任意名字,自己邮箱 进入邮箱点击网址就自动下载了 然后安装 二.使用pure-ftpd搭建ftp服务 yum insta ...
- 利用ssh传输文件 分类: 服务器搭建 Raspberry Pi 2015-04-12 18:47 58人阅读 评论(0) 收藏
在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件 scp username@servername:/path/filename /var/www/local_dir(本 ...
- jetty作为内嵌服务器自启动
为了完成web工程的测试,最近内嵌jetty也要搞起来.第一次搞还是挺焦头烂额的.直接上成果: package com.test.action; import java.io.File; import ...
- 使用Libmicrohttpd搭建内嵌(本地)服务器
Libmicrohttpd简介 GNU Libmicrohttpd是一个用来在项目中内嵌http服务器的C语言库,它具有以下几个非常鲜明的特点: C语言库,小而快. API非常简单,且都是可重入的. ...
- Message高级特性 & 内嵌Jetty实现文件服务器
1. Messaage Properties 常见属性 更多的属性以及介绍参考:http://activemq.apache.org/activemq-message-properties.html ...
- IDEA内嵌Jetty启动SpringMvc项目
这段时间本意是想要研究一下Netty的多线程异步NIO通讯框架,看完原理想要做下源码分析.查找资料发现Jetty框架底层支持用Netty做web请求的多线程分发处理,于是就筹备着将Jetty框架内嵌到 ...
随机推荐
- paramiko模块的安装和使用(含上传本地文件或文件夹到服务器,以及下载服务器文件到本地)
安装和使用分两步介绍: 介绍一下,本文的运行环境是win7 64位 和python 2.7 . 安装: WIN7_64位 安装python-ssh访问模块(paramiko)的安装教程,本人亲测下面 ...
- CodeForces - 359C-Prime Number
Simon has a prime number x and an array of non-negative integers a1, a2, ..., an. Simon loves fracti ...
- git 工作中常用命令
git 命令: git init : 初始化 git add . :添加所有文件 git status :查看状态 若果是第一次会提示你输入你的 邮箱 和姓名: git commit ...
- HMAC算法加密
/** * HMAC算法加密 * @param message 待加密信息 * @param key 密钥 * @return */ public static String HmacSHA256(b ...
- dedecms模板目录
根目录 /dede 管理后台目录 /freelist 自由文档列表生成目录 /html 默认文章生成目录 /include 程序核心文件目录 /member 会员管理目录 /plus 插件及辅助功能目 ...
- hdu1865 1sting (递归+大数加法)
1sting Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 一个简单的基于MINI2440开发板的启动代码
1. S3C2440大概的启动流程(NAND启动): ①设置CPU为SVC模式 ②关闭看门狗 ③屏蔽中断 ④关闭MMU ⑤初始化时钟 ⑥初始化内存(SDRAM) ⑦初始化栈指针(SP, R13) ⑧初 ...
- jmeter使用总结
1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具.用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域 ...
- Mybatis学习笔记1 - Hello World
1.pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- python编程零碎积累
例行程序 def routine(): lastday = '' while True: day = datetime.datetime.now().strftime( ...