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

Posted coder-mifir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)相关的知识,希望对你有一定的参考价值。

网上关于消息队列技术原理说明的详细文档很多,但涉及到Delphi的具体实现很少,这是我从网上找了一上午的资料,自己整合和尝试的能运行的程序。

打开控制面板->程序->添加组件,添加消息队列

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

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

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,MSMQ_TLB,ComObj,StdCtrls,OleServer; 
type
TForm1 = class(TForm)
MSMQMessage1: TMSMQMessage;
MSMQQueueInfo1: TMSMQQueueInfo;
MSMQQueue1: TMSMQQueue;
MSMQEvent1: TMSMQEvent;
Button1: TButton;
edit1:TEdit;
edit2: TEdit;
Button2: TButton;
lbl1: TLabel;
lbl2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure MSMQEvent1Arrived(Sender: TObject; var Queue: OleVariant; Cursor: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm} 
//发送消息
procedure TForm1.Button1Click(Sender: TObject);
begin
 //确定消息队列路径
MSMQQueueInfo1.PathName :=./Private$/Test;
//远程机器名
MSMQQueueInfo1.RemoteMachineName := 127.0.0.1 ;
//消息内容
(MSMQMessage1.DefaultInterface as IMSMQMessage).body :=edit1.Text;
//连接到消息队列 MSMQQueue1.ConnectTo(MSMQQueueInfo1.Open(MQ_SEND_ACCESS, 0));
//发送消息 MSMQMessage1.Send(MSMQQueueInfo1.Open(MQ_SEND_ACCESS, MQ_DENY_NONE));
showmessage( 已经把信息入写入消息队列中 );
end;
//接收消息
procedure TForm1.Button2Click(Sender: TObject);
begin
msmqqueueinfo1.PathName :=./Private$/Test; msmqqueue1.Disconnect; msmqqueue1.ConnectTo(msmqqueueinfo1.Open(1, 0));
//msmqqueue1.EnableNotification(MSMQEvent1.DefaultInterface); 
end;
//MSMQEvent事件 procedure TForm1.MSMQEvent1Arrived(Sender: TObject; var Queue: OleVariant; Cursor: Integer);
var Msg: Variant;
begin
//从队列中读取消息
Msg := msmqqueue1.Receive;
edit2.Text := Msg.body;
end;
end. 

 

以上是关于Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)的主要内容,如果未能解决你的问题,请参考以下文章

MSMQ消息队列的安装启用

MES智能制造背景下MES的发展方向

20180328 Redis和MSMQ

MSMQ 消息查看器?

实现 TCP、命名管道和 MSMQ 的传统方法是啥?

确认下眼神,这是你需要的MES软件吗?