使用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框架内嵌到 ...
随机推荐
- 让函数的input、output更"函数化"
前言 我们都知道函数的基本形式为:output f(input),且先按这种形式进行input与output的分析,我们的input与output可以有更好的设计方式,而我们的output是选择使用r ...
- Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...
- Windows任务计划创建计划,定时执行PowerShell命令
[环境介绍] 操作系统:Windows Server 2012 R2,64位操作系统 PowerShell版本:PowerShell 1.0 脚本位置:C:\BackUp.ps1 启动目录:C:\Wi ...
- HDU计算机学院大学生程序设计竞赛(2015’12)The Country List
Problem Description As the 2010 World Expo hosted by Shanghai is coming, CC is very honorable to be ...
- Docker 使用samba 共享文件
Docker 使用samba 共享文件 docker run -it --name samba \ -p 139:139 -p 445:445 \ -v /home/develop/code/de ...
- fiddler抓包出现错误 creation of the root certificate was not successful
fiddler安装完要配置才可以抓取HTTP 1.首先 找到Tools——>Options,在弹出的菜单中 选择https项 勾选捕捉https,这样配置完OK之后 一般会弹窗提示安装证书,点击 ...
- iOS如何实时查看App运行日志
Linux下管理挂载IOS设备——libimobiledevicehttps://www.jianshu.com/p/6423610d3293https://blog.csdn.net/fengzei ...
- servlet3
亿级流量架构 http://www.iteye.com/blogs/subjects/as-core servlet3.1对比 http://jinnianshilongnian.iteye.com/ ...
- Linux UDEV提权过程
1.下载攻击脚本 [test@H0f ~]$ wget http://www.extmail .org/source/exploit-udev-8478 --2018-04-02 01:21:00-- ...
- gRPC框架
https://blog.csdn.net/shuanger_/article/details/47281381 https://grpc.io/ gRPC是利用通讯协议是HTTP2,序列化用prot ...