使用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. POJ1113 Wall

    题目来源:http://poj.org/problem?id=1113题目大意: 如图所示,给定N个顶点构成的一个多边形和一个距离值L.建立一个围墙,把这个多边形完全包含在内,且围墙距离多边形任一点的 ...

  2. kibana启动调试

    在windows的命令行窗口中,将路径制定到kibana的源代码bin目录中,然后执行 kibana.bat --dev --no-base-path 需要注意的是kibana.yml中的配置文件需要 ...

  3. vs 部署SharePoint项目时, package丢失

    bug描述:vs部署sharepoint项目时报错:重启iis应用池失败,未将对象设置引用到实例. 解决方案:查看项目文件(包括隐藏文件),发现package文件不见了,在回收站内能找到被删除的pac ...

  4. 75th LeetCode Weekly Contest Smallest Rotation with Highest Score

    Given an array A, we may rotate it by a non-negative integer K so that the array becomes A[K], A[K+1 ...

  5. 华东交通大学2015年ACM“双基”程序设计竞赛1001

    Problem A Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Sub ...

  6. django 视图view

    视图里一般是函数和类,需要返回响应. 试图分为2种:2. CBV(class base view) FBV(function base view) from django.views import V ...

  7. Linux系统结构及常用命令

    一.系统结构 Linux是一个倒树形结构,最大的目录名叫“/”(根目录) 根目录之下有许多的二级目录,这些目录在系统中都拥有自己不同的功能,如图: 以后的诸多命令的执行和操作都与这些目录相关,现在了解 ...

  8. sql运算符优先级及逻辑处理顺序--查询sql执行顺序

    sql逻辑处理顺序 --开启和关闭查询 --SET STATISTICS TIME ON---------------------------------------------请先来看看SET ST ...

  9. Java对象排序两种方法

    转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...

  10. 学习ssm

    1.安装配置maven (1)在http://maven.apache.org/download.cgi下载apach-maven-3.5.4-bin.zip (2)将apach-maven-3.5. ...