Posts Tagged ‘MQ’
使用MQ传输结构体信息
星期四, 12月 6, 2007 1:16 No Comments忙了一个星期终于搞掂了,心情顺畅,以此志之。
代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
MQDataInfo = record
ID : Integer;
Name : PAnsiChar;
Value : PAnsiChar;
Image : TBitmap;
end;
PMQDataInfo = ^MQDataInfo;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
Button2: TButton;
Button3: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses MQI;
const
QM_NAME : MQCHAR48 = ‘MyTest’#0;
QUEUE_NAME : MQCHAR48 = [...]
测试服务器到服务器的MQ传输
星期四, 12月 6, 2007 1:15 No Comments测试服务器到服务器:
要测试安装,必须设置两个工作站,一个作为发送方,另一个作为接收方。
1.设置发送方工作站:
1.1.创建名为“saturn.queue.manager”的缺省队列管理器。
命令为:crtmqm -q saturn.queue.manager
消息显示已创建该队列管理器,并且创建了缺省WebSphere MQ对象。
1.2.启动缺省队列管理器。
命令为:strmqm
队列管理器启动时,将显示信息。
1.3.启动MQSC命令。
命令为:runmqsc
MQSC启动时,显示消息“启动WebSphere MQ命令”。MQSC不使用命令提示。
1.4.定义一个本地队列,作为名为Transmit1.queue的传输队列。
命令:define qlocal(transmit1.queue) usage(xmitq)
创建队列时,显示消息“已创建WebSphere MQ队列”。
1.5.创建远程队列的本地定义。
命令:define qremote(local.def.remote.queue) rname(orange.queue)
rqmname(’venus.queue.manager’) xnitq(transmit1.queue)
rname参数指定该消息将要发送到远程机器上的队列名称。
因此,rname参数指定的名称必须是向其发送消息的队列名称(即接收方工作站的Orange.queue)。
1.6.定义发送方通道。
命令:define channel(first.channel) chltype(sdr) conname(con-name)
xmitq(transmit1.queue) trptype(tcp)
值con-name是接收方工作站的TCP/IP地址。
1.7.停止MQSC。
命令:end
—————————————————
现在,已经定义了一下对象:
1.名为saturn.queue.manager的缺省队列管理器
2.名为Transmit1.queue的传输队列
3.名为Local.def.of.remote.queue的远程队列
4.名为First.Channel的发送方通道
2.设置接收方工作站:
2.1.创建名为venus.queue.manager的缺省队列管理器。
命令:crtmqm -q venus.queue.manager
消息显示已创建该队列管理器,并且创建了缺省WebSphere MQ对象。
2.2.启动队列管理器。
命令:strmqm
队列管理器启动时,将显示消息。
2.3.启动WebSphere MQ侦听器。
命令:runmqlsr -t tcp
侦听器启动时,将显示消息。
2.4.打开一个新的命令提示窗口,准备发出MQSC命令。
命令:runmqsc
MQSC启动时,显示消息“启动WebSphere MQ命令”。MQSC不使用命令提示。
2.5.定义名为Orange.Queue的本地队列。
命令:define qlocal(orange.queue)
创建队列时,显示消息“已创建WebSphere MQ队列”。
2.6.创建接收方通道。
命令:define channel(first.channel) chltype(rcvr) trptype(tcp)
2.7.停止MQSC。
命令:end
——————————————
现在,已经定义了以下对象:
1.名为venus.queue.manager的缺省队列管理器
2.名为Orange.Queue的队列
3.名为First.Channel的接收方通道
3.测试工作站之间的通信:
3.1.如果两个工作站已停止,则使用strmqm命令重新启动它们。
3.2.在发送方工作站上,启动发送方通道。
命令:runmqchl -c FIRST.CHANNEL -m saturn.queue.manager
启动发送方通道时,将自动启动接收方工作站上的接收方通道。
3.3.在发送方工作站上,打开一个新的命令提示窗口并更改到Bin目录。
3.4.将消息放入队列。
命令:amqsput LOCAL.DEF.OF.REMOTE.QUEUE
这个命令将消息放入远程队列的本地定义(它指定远程队列名称)。
3.5.输入消息文本,然后按两次Enter键。
3.6.在接收方工作站上,更改到Bin目录。
3.7.从队列中获取消息。
命令:amqsget ORANGE.QUEUE
样本程序启动,并显示消息。暂停后,样本结束并再次显示命令提示符。
验证本地MQ安装
星期四, 12月 6, 2007 1:15 No Comments设置:使用以下步骤来安装队列管理器和队列:
1.创建名为venus.queue.manager的缺省队列管理器。
命令:crtmqm -q venus.queue.manager
消息显示已创建该队列管理器,并且创建了缺省WebSphere MQ对象。
2.启动缺省队列管理器。
命令:strmqm
队列管理器启动时,将显示消息。
3.启用MQSC命令。
命令:runmqsc
MQSC会话启动时,将显示消息“启动WebSphere MQ命令”。MQSC不使用命令提示。
4.定义名为Orange.Queue的本地队列。
命令:define qlocal(orange.queue)
MQSC中的任何小写文本都将自动转换成大写,除非用引号将它们括起来。
这意味着如果用名称Orange.Queue创建了队列,则在MQSC以外的其它命令中必须使ORANGE.QUEUE。
创建队列时,显示消息“已创建WebSphere MQ队列”。
5.停止MQSC。
命令:end
显示以下消息,随后再次显示命令提示:
读取了一条MQSC命令。
命令未发生语法错误。
处理所有有效的MQSC命令。
——————————————————–
现在,已经定义了以下对象:
1.名为venus.queue.manager的缺省队列管理器
2.名为ORANGE.QUEUE的队列
测试:
要测试队列和队列管理器,请使用样本程序amqsput和amqsget:
1.更改到文件夹:Bin。
2.将消息放入队列。
命令:amqsput ORANGE.QUEUE
显示以下消息:
Sample amqsput0 start
target queue is ORANGE.QUEUE
3.输入一些消息文本,然后按Enter键两次。显示以下消息:
Sample amqsput0 end
现在消息已经在队列中并且再次显示命令提示。
4.从队列获取消息。
命令:amqsget ORANGE.QUEUE
样本程序启动,并显示您的消息。暂停后,样本结束并再次显示命令提示符。
现在完成了本地安装的验证。
MQ中简单的消息发送和接收的单元文件MQI.pas
星期四, 12月 6, 2007 1:14 No Comments以下内容是单元文件MQI.pas的正文
MQI.pas是对mqm.dll的Delphi封装接口(版权归原作者)
unit MQI;
interface
const
MQOD_STRUC_ID = ‘OD ‘;
MQOD_VERSION_1 = 1;
MQOD_VERSION_2 [...]
MQ中简单的消息发送和接收
星期四, 12月 6, 2007 1:13 No Comments对mqm.dll动态链接库的封装接口
通过MQI.pas提供的接口函数我们可以很容易的发送和接收简单的文本信息
因为只是例子,所以命名不标准,注释不规范,好在代码简单,容易读懂
窗体文件不提供了,相信看到代码也应该能猜出来了
整个单元代码文件如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MQI;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
private
{ Private declarations }
Hconn : MQHCONN;
Hobj : MQHOBJ;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
QM_NAME : MQCHAR48 = ‘MyTest’#0;
QUEUE_NAME : [...]