Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)

网上有关消息队列技术原理说明的详尽文档很多,但提到到Delphi的切实落实大少,这是本身从网上寻找了一致上午底素材,自己组合和品味的克运作的次。

开辟控制面板->程序->添加组件,添加信队列

开辟控制面板->计算机管理->服务以及应用程序->消息队列,添加私有发消息Test.

当Delphi中添加MSMQ控件, TMSMQMessage; TMSMQQueueInfo; TMSMQQueue;
TMSMQEvent; 这些控件在Project->Import type Library里在。

源代码如下:

 

 

[c-sharp] view
plain copy

 

  1. unit Unit1;  
  2. interface  
  3. uses  
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  5.   Dialogs,MSMQ_TLB,ComObj, StdCtrls, OleServer;  
  6. type  
  7.   TForm1 = class(TForm)  
  8.     MSMQMessage1: TMSMQMessage;  
  9.     MSMQQueueInfo1: TMSMQQueueInfo;  
  10.     MSMQQueue1: TMSMQQueue;  
  11.     MSMQEvent1: TMSMQEvent;  
  12.     Button1: TButton;  
  13.     edit1: TEdit;  
  14.     edit2: TEdit;  
  15.     Button2: TButton;  
  16.     lbl1: TLabel;  
  17.     lbl2: TLabel;  
  18.     procedure Button1Click(Sender: TObject);  
  19.     procedure Button2Click(Sender: TObject);  
  20.     procedure MSMQEvent1Arrived(Sender: TObject; var Queue: OleVariant;  
  21.       Cursor: Integer);  
  22.   private  
  23.     { Private declarations }  
  24.   public  
  25.     { Public declarations }  
  26.   end;  
  27. var  
  28.   Form1: TForm1;  
  29. implementation  
  30. {$R *.dfm}  
  31. //发送信息  
  32. procedure TForm1.Button1Click(Sender: TObject);  
  33. begin  
  34.     //确定消息队列路径  
  35.     MSMQQueueInfo1.PathName       :=’./Private$/Test’;  
  36.     //远程机器名  
  37.     MSMQQueueInfo1.RemoteMachineName   :=   ‘127.0.0.1’   ;  
  38.     //消息内容  
  39.     (MSMQMessage1.DefaultInterface   as   IMSMQMessage).body   :=edit1.Text;  
  40.     //连接到消息队列  
  41.     MSMQQueue1.ConnectTo(MSMQQueueInfo1.Open(MQ_SEND_ACCESS,       0));  
  42.     //发送信息  
  43.     MSMQMessage1.Send(MSMQQueueInfo1.Open(MQ_SEND_ACCESS,       MQ_DENY_NONE));  
  44.     showmessage( ‘已经将信息可写副消息队列中 ‘);  
  45. end;  
  46. //接收信息  
  47. procedure TForm1.Button2Click(Sender: TObject);  
  48. begin  
  49.   msmqqueueinfo1.PathName   :=’./Private$/Test’;  
  50.   msmqqueue1.Disconnect;  
  51.   msmqqueue1.ConnectTo(msmqqueueinfo1.Open(1,   0));  
  52.   //  
  53.   msmqqueue1.EnableNotification(MSMQEvent1.DefaultInterface);  
  54. end;  
  55. //MSMQEvent事件  
  56. procedure TForm1.MSMQEvent1Arrived(Sender: TObject; var Queue: OleVariant;  
  57.   Cursor: Integer);  
  58.       var  
  59.   Msg:   Variant;  
  60.   begin  
  61.   //从队列中读取信息  
  62.   Msg   :=   msmqqueue1.Receive;  
  63.   edit2.Text :=   Msg.body;  
  64. end;  
  65. end.  

 

 

 

可以连续不断发送多长条不同的音信。消息会补充加至信息队列。每“接收”一涂鸦会面打消息队列中获取一久信息并出示在经受消息框中。

相关文章