activemq几种传递消息方法的效率怎么样

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)

第一步 安装activemq,参考http://blog.163.com/yangzhanghui_job/blog/static/17957506220127171173225/。

第二步 登录activemq查询信息http://localhost:8161/admin/,原始用户名和密码都为admin,为了安全起见,可以修改密码,控制台的登录用户名密码保存在conf/jetty-realm.properties文件中admin: admin(新密码), admin(值得注意的是 用户名和密码的格式是:用户名 : 密码 ,角色名)。

第三步 activemq持久化,默认是<kahaDB directory="${activemq.base}/data/kahadb"/>,activemq总共支持三种持久化,可以自行百度。

第三步 项目中引入activemq,javamail配置文件(pom.xml)!

最近一直在关注一些文件传输中间件的实现,想用ActiveMQ实现一些具体的功能。经过几周的ActiveMQ的学习,以及中间件必须一些功能。发现一些问题自己还是不能搞懂,希望网上一些,大牛拍一下砖,支持一下。

1.在消息中间件的消息的路由的算法怎么实现的。

如A、B、C、D、E 五个节点上都是提供消息服务的 AMQ ,五个节点连通成一个网络,连接到 A

节点的客户端可以发消息到五个节点中的任意一个节点,AMQ 会自动寻找一条最佳路径传递消息到目标节点。如从A

发消息到D,有两条连通路径:A->B->C->D 和A->E->D,其中 A->E->D

经过的节点最少,该路径为最佳路径, AMQ 将根据此路径对消息进行传递。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12102075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存