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

网上有关信息队列技术原理表达的详实文档很多,但涉及到Delphi的切切实实贯彻很少,那是自己从网上找了一早晨的素材,自己组合和品尝的能运作的先后。

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

开拓控制面板->计算机管理->服务与应用程序->消息队列,添加私有有音讯Test.

在Delphi中添加MSMQ控件, TMSMQMessage; TMSMQQueueInfo; TMSMQQueue;
TMSMQ伊夫(Eve)nt; 这几个控件在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.  

 

 

 

可以接连发送多条分裂的音讯。音讯会添加到新闻队列。每“接收”几遍会从信息队列中赢得一条信息并出示在经受新闻框中。

相关文章