由于JMS Streams的种种不足,限制了其用于传输大文件的功能。因此,ActiveMQ在JMS的基则腊础上创建了一种新的消息类型------BlobMessage。
因为派生与JMS的Message对象,通过BlobMessage传输大文件可以利用ActiveMQ消息Broker的所有特性,如高可靠性、事务支持、发布订阅......
Blob Messages是通过带外传输(out-of-band transport)的机制来实现大文件传输的,在文件传输的过程中,通过http、ftp、scp或其他点对点的协议来进行文件的传输,同时,通过BlobMessage来传送控制信息以及文件的验证信息。其结构图如下:
由于JMS可以可靠的将控制信息传送到ActiveMQ Broker,同时ftp协议本身就支持断点续传,所以,文件简单的就可以发送到服务拿纤端,并且保存在服务端,当文件的消费端监听队列的队列就可以轻松的下载文件了,如果存在多个消费端,则可以通过JMS的发布订阅模式实现。
通过比较三种方案,第一种通过JMS Streams传输存在断点续传的问题,第二种方式则引入了额外的复杂度------分割文件和合并文件,复杂度相对较高,第三种Blob Messages对于开发者来说就和发送普通消息是一样的,只是服务端它依赖FTP Server来上传下载文件。经过比孙敏滑较可以发现,Blob Messages的方式更具备可用性。
使用引用消息传送文件以下 *** 作均以admin用户为例:
1. 将admin用户加入administrator和mqm用户组,重新登录;
2. 修改MQ服务的登录用户为admin,然后重新启动MQSeries服务;
3. 修改MQ DCOM组件的登录用户为“启动用户”,这样当以admin用户使用MQ资源管理器时,该DCOM组件将以admin用户的身份运行;关闭MQ资源管理器并重新打开,以使修改生效。
4. 启动Queue Manager,以QMA(发送文件,在MACHINE1服务器上)和QMB(接受文件,在MACHINE2服务器上)为例;
5. 创建MQ对象:
1)在QMA上:
define chl(chl1) chltype(sdr) trptype(tcp) conname('machine2') +
xmitq(xmitq) msgdata(FLATFILE) +
msgexit(' D:\IBM\WMQ\Tools\c\Samples\Bin\amqsxrm(MsgExit) ')
define ql(xmitq) usage(xmitq)
define chl(report) chltype(rcvr) trptype(tcp) replace
define qr(qr) rname(dq) rqmname(QMB) xmitq(xmitq) replace
2)在QMB上:
define chl(chl1) chltype(rcvr) trptype(tcp) +
msgexit(' D:\IBM\WMQ\Tools\c\Samples\Bin\amqsxrm(MsgExit) ') +
msgdata(FLATFILE)
define chl(report) chltype(sdr) trptype(tcp) conname('MACHINE1')
xmitq(QMA)
define ql(QMA) usage(xmitq)
注:如果使用MQ提供的接样例程序amqsgrm.exe接收文件,则作以下3)之后的设置,也可另写接受程序直接接收消息并获得已送达数据文件的名称。
3)在QMB上(可选):猜雀
define ql(initq)
define pro(proc) applicid('D:\IBM\WMQ\Tools\c\Samples\Bin\amqsgrm')
define ql(dq) initq(initq) process(proc) trigger trigtype(first)
在 MQ 服务中为 QMB 创建“触发器监控器”服务,设定监控队列为 INITQ ;并启动;
6. 在发送端启动发送通道chl1,在蔽李接收端启动发送通道report;
此时所有的配置已经完成,可以使用样穗并早例中的amqsprm.exe程序发送文件:
amqsprm -m QMA -i d:\tmp\src\srcfile.name -o d:\tmp\dest\destfile.name -q QR -t FLATFILE -w 10
7. 查验d:\tmp\dest\destfile.name文件已经产生。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)