activemq几种传递消息方法的效率怎么样
1个回答
展开全部
作为消息发送
按照JMS规范,为了保证可靠性,所有的消息都应该是发送到broker,然后交由broker来投递的。也即是说其实JMS是不建议或不支持传输文件的。
对于比较小的文件,简单的处理方式是先读取所有的文件成byte[],然后使用ByteMessage,把文件数据发送到broker,像正常的message一样处理。对于大文件,例如1GB以上的文件,这么搞直接把client或是broker给oom掉了。
这种方式仅仅适用于小文件的传输。特别是如果broker端使用数据库作为存储,message序列化以后存放于blob字段,文件传输频繁或是稍微有点大,写入效率极低。
直接传输文件
为了解决传输大文件的问题,ActiveMQ在jms规范之外引入了jms streams的概念。PTP模式下,连到同一个destination的两端,可以通过broker中转来传输大文件。
发送端使用connection.createOutputStream打开一个输出流,往流里写文件。
OutputStream out =connection.createOutputStream(destination);
接收端则简单的使用connection.createInputStream拿到一个输入流,从中读取文件数据即可。
InputStream in = connection.createInputStream(destination)
按照JMS规范,为了保证可靠性,所有的消息都应该是发送到broker,然后交由broker来投递的。也即是说其实JMS是不建议或不支持传输文件的。
对于比较小的文件,简单的处理方式是先读取所有的文件成byte[],然后使用ByteMessage,把文件数据发送到broker,像正常的message一样处理。对于大文件,例如1GB以上的文件,这么搞直接把client或是broker给oom掉了。
这种方式仅仅适用于小文件的传输。特别是如果broker端使用数据库作为存储,message序列化以后存放于blob字段,文件传输频繁或是稍微有点大,写入效率极低。
直接传输文件
为了解决传输大文件的问题,ActiveMQ在jms规范之外引入了jms streams的概念。PTP模式下,连到同一个destination的两端,可以通过broker中转来传输大文件。
发送端使用connection.createOutputStream打开一个输出流,往流里写文件。
OutputStream out =connection.createOutputStream(destination);
接收端则简单的使用connection.createInputStream拿到一个输入流,从中读取文件数据即可。
InputStream in = connection.createInputStream(destination)
北京康思
2018-09-20 广告
2018-09-20 广告
1、基本功能。市面上的电子负载均有基本的四项功能:恒流、恒压、恒阻和恒功率(安捷伦没有恒功率)。在功能基本相同,精确度相差不大的情况下,怎么判断是否符合要求呢?CHROMA和博计的电子负载只有一套工作电路,就是恒流功能。其他功能是根据欧姆定...
点击进入详情页
本回答由北京康思提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询