使用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搭建内嵌文件服务器的更多相关文章

  1. 使用jetty作为内嵌服务器启动项目

    http://blog.csdn.net/robinpipi/article/details/7557035 需求:把jetty作为内嵌的一个服务器,直接启动,web项目不用部署在应用服务器中.在网上 ...

  2. FTP相关、用vsftpd搭建ftp、xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    1.FTP相关(file transfer protocol,文件传输协议)   2.用vsftpd搭建ftp安装:yum install vsftpd -y创建一个虚拟用户:useradd  vft ...

  3. xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    6月25日任务 15.4 xshell使用xftp传输文件15.5 使用pure-ftpd搭建ftp服务扩展vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.co ...

  4. Linux centosVMware xshell使用xftp传输文件、使用pure-ftpd搭建ftp服务

    一.xshell使用xftp传输文件 Ctrl+Alt+F 弹出 下载进入 填写任意名字,自己邮箱 进入邮箱点击网址就自动下载了 然后安装 二.使用pure-ftpd搭建ftp服务 yum insta ...

  5. 利用ssh传输文件 分类: 服务器搭建 Raspberry Pi 2015-04-12 18:47 58人阅读 评论(0) 收藏

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件 scp username@servername:/path/filename /var/www/local_dir(本 ...

  6. jetty作为内嵌服务器自启动

    为了完成web工程的测试,最近内嵌jetty也要搞起来.第一次搞还是挺焦头烂额的.直接上成果: package com.test.action; import java.io.File; import ...

  7. 使用Libmicrohttpd搭建内嵌(本地)服务器

    Libmicrohttpd简介 GNU Libmicrohttpd是一个用来在项目中内嵌http服务器的C语言库,它具有以下几个非常鲜明的特点: C语言库,小而快. API非常简单,且都是可重入的. ...

  8. Message高级特性 & 内嵌Jetty实现文件服务器

    1. Messaage Properties  常见属性 更多的属性以及介绍参考:http://activemq.apache.org/activemq-message-properties.html ...

  9. IDEA内嵌Jetty启动SpringMvc项目

    这段时间本意是想要研究一下Netty的多线程异步NIO通讯框架,看完原理想要做下源码分析.查找资料发现Jetty框架底层支持用Netty做web请求的多线程分发处理,于是就筹备着将Jetty框架内嵌到 ...

随机推荐

  1. paramiko模块的安装和使用(含上传本地文件或文件夹到服务器,以及下载服务器文件到本地)

    安装和使用分两步介绍: 介绍一下,本文的运行环境是win7 64位 和python 2.7  . 安装: WIN7_64位 安装python-ssh访问模块(paramiko)的安装教程,本人亲测下面 ...

  2. CodeForces - 359C-Prime Number

    Simon has a prime number x and an array of non-negative integers a1, a2, ..., an. Simon loves fracti ...

  3. git 工作中常用命令

    git 命令: git  init  : 初始化 git  add .  :添加所有文件 git  status  :查看状态 若果是第一次会提示你输入你的 邮箱 和姓名: git  commit  ...

  4. HMAC算法加密

    /** * HMAC算法加密 * @param message 待加密信息 * @param key 密钥 * @return */ public static String HmacSHA256(b ...

  5. dedecms模板目录

    根目录 /dede 管理后台目录 /freelist 自由文档列表生成目录 /html 默认文章生成目录 /include 程序核心文件目录 /member 会员管理目录 /plus 插件及辅助功能目 ...

  6. hdu1865 1sting (递归+大数加法)

    1sting Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  7. 一个简单的基于MINI2440开发板的启动代码

    1. S3C2440大概的启动流程(NAND启动): ①设置CPU为SVC模式 ②关闭看门狗 ③屏蔽中断 ④关闭MMU ⑤初始化时钟 ⑥初始化内存(SDRAM) ⑦初始化栈指针(SP, R13) ⑧初 ...

  8. jmeter使用总结

    1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具.用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域 ...

  9. Mybatis学习笔记1 - Hello World

    1.pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  10. python编程零碎积累

    例行程序 def routine():     lastday = ''     while True:         day = datetime.datetime.now().strftime( ...