很多时候在不同系统之间进行数据交互的时候,往往会用到各种标准的数据载体,xml, file, JMS。在这里主要讲讲用perl发送和接收MQ消息。
我们用到的MQ server是IBM的MQ.
大致的步骤如下:
1,新建queue manager对象
2,新建queue对象
3,新建MQ message对象
4,通过queue对象get/put message对象。
5,关闭queue
简单的实例代码如下:
#!/usr/bin/perl -w
use strict;
use warnings;
#MQ related modules
use MQSeries;
use MQSeries::QueueManager;
use MQSeries::Queue;
use MQSeries::Message;
my $qmgr = MQSeries::QueueManager->new(
QueueManager => 'THEJTECHS.QUEUEMGR',
ClientConn => {
'ChannelName' => 'THEJTECHS.CHANNEL',
'TransportType' => 'TCP',
'ConnectionName' => 'thejtechs.com(1414)',
'MaxMsgLength' => 16 * 1024 * 1024,
},
) or die "can not connection to queue manager\n";
#enqueue
my $in_queue = MQSeries::Queue->new(
QueueManager => $qmgr,
Queue => 'THEJTECHS.QUEUE.IN',
Mode => 'output',
) or die "can not open queue\n";
my $message = MQSeries::Message->new(
Data => "this is an enqueue message",
);
$in_queue->Put(Message => $message) or die "can not put Message: CompCode: " . $in_queue->CompCode() . " Reason: " . $in_queue->Reason();
$in_queue->Close();
#dequeue
my $out_queue = MQSeries::Queue->new(
QueueManager => $qmgr,
Queue => 'THEJTECHS.QUEUE.OUT',
Mode => 'input',
) or die "can not open queue\n";
my $getMessage = MQSeries::Message->new;
my $count = 0;
while($count < 10){
$out_queue->Get(
Message => $getMessage,
Sync => 1,
) or die "unable dequeue message\n";
if((my $msg = $getMessage->Data())){
print "$msg\n";
$out_queue->QueueManager()->Commit() or die "can not commit\n";
}else{
$out_queue->QueueManager()->BackOut() or die "can not backOut\n";
}
$count++;
}
$out_queue->Close();