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. 

原文地址:https://www.cnblogs.com/Coder-MIFir/p/10333753.html

时间: 2024-11-02 15:03:53

Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)的相关文章

基于System V Message queue的PHP消息队列封装

原创文章,转载请注明出处:http://www.huyanping.cn/?p=235 作者:Jenner System V Message queue 是一种进程通信(IPC)的方式,方便实现生产者-消费者模型,单个或多个生产者向队列中写入消息,多个生产者再从队列中获取消息进行处理. 项目地址:https://github.com/huyanping/Zebra-PHP-Framework 该Wrapper支持: 进程通信 设置最大队列容量(字节单位) 获取当前队列数量 修改队列部分属性 注意

MSMQ(Microsoft Message Queue)

http://www.cnblogs.com/sk-net/archive/2011/11/25/2232341.html 利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信.消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法. MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术.但是在使用XML Web Services或.Net Remot

MSMQ学习笔记二——创建Message Queue队列

一.创建Message Queue队列的主要流程 1.定义MQQUEUEPROPS 结构: 2.设置消息队列属性: 3.初始化MQQUEUEPROPS 结构: 4.调用MQCreateQueue创建队列. 下面对MSDN上的创建Message Queue队列示例函数: HRESULT CreateMSMQQueue( LPWSTR wszPathName, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPWSTR wszOutFormatName, DWO

Message Queue基本使用说明

一.安装Message Queue: 在Win7之前,控制面板,添加删除组件(Windows Message Queue). Win7~Win8:控制面板,程序和功能,启用或关闭Windows功能(找到Windows Message Queue服务器)选项,连同所有子类一并勾上即可,自动安装. 二.使用Message Queue: 1)用于各类服务器.计算机之间的通讯: 本地,自己给自己发(直接是.\\Private$\\Queue的私有名字). 远程计算机: FormatName:Direct

DELPHI下的SOCK编程

本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为学习编程就如同学习外语一样,最好的方式是你先学会如何去运用它,然后才是了解它的语言特性.语法之类的东西.不过很可惜,我们以前的外语教育使用了相反的过程.软件编程也是一样,在很多人的大学阶段,你更多的是学习那些理论知识,学习“语法”,这里,我丝毫没有贬低理论知识重要性的意思.理论知识和实践是相辅相成的,但一个恰当的学习方式,很多时候可以让学

DELPHI下API简述(1800个API)

DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API

关于访问MSMQ远端私有队列的一点经验

这里应该将私有队列称做"专用队列"好像更贴切一些了,O(∩_∩)O 可以访问远程主机的MSMQ的私有队列的,这个是毋庸置疑的,但需要说明的是不能通过代码创建私有队列,关于这一点,我也不知道为什么? 下面说说我的经验 1.首先要保证远端的主机和本地机器同时加入到了同一个域中 2.要通过管理工具在远端主机中创建私有的队列,例如 192.168.117.47\Private$\MyPath,可以在创建时指定是否启用事务 3.在本地无法得到远端是否存在指定的私有队列,也无法得到指定的私有队列是

Message Queue与WebService比较

最近在使用IBM Websphere Message Queue,与WebService相比,同样是跨平台的通信方式,那么各种有什么优势呢? Message Queue属于比较重量级的应用,在规范化的企业流程中用的比较多.如果企业有很多部门,部门都有自己的系统,那么不同的系统之间的集成通信,Message Queue是很好的选择.MQ一般都做为企业级IT应用的中间件存在,有很多企业是作为标准IT基础结构存在的.在市面上常见的MQ中间件有IBM websphere message queue se

Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue

前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler异步通信传递机制(包括Looper.Message Queue) 目录 定义 Android提供的一套消息传递机制 作用 用于实现子线程对UI线程的更新,实现异步消息的处理: - 在新启动的线程中发送消息 - 在主线程中获取并处理信息 为什么要用Handler 在安卓开发中: - 为了保证Android的UI操作是线程安全的,Android规定了只允许UI线程修改Activity里的UI组件: - 但