DotNetMQ-基于C#和.NET框架的开源消息队列系统 – 安装部署及消息发送接收范例
下面具体介绍如何安装、部署以及使用DotNetMQ 消息组件。
1. 先看看DotNetMQ 项目源码
DotNetMQ 项目是消息组件服务;MDSManager 项目消息组件的管理界面,用来配置系统中的客户端机器,如下图所示。
MDSCommonLib 项目是客户端系统需要引用的DLL程序集,使客户端系统可以和MDS 服务进行交互。
2. 部署DotNetMQ 服务
该服务编译的DLL程序集在如下目录 — DotNetMQ_Sources\DotNetMQ\bin\Debug
在CMD窗口中,在上述目录下,执行如下命令,安装部署 DotNetMQ 服务:
installutil dotnetmq.exe
看看安装好的DotNetMQ服务,并启动服务。
3. 注册和配置DotNetMQ 消息应用程序
在安装部署好DotNetMQ服务之后,开始运行MDSManager.exe 程序,添加和注册客户端应用程序,如下所示,添加Application1和Application2 应用程序。
如上图所示,添加好应用程序配置之后,可以到DotNetMQ_Sources\DotNetMQ\bin\Debug 目录下,查看MDSSettings.xml 配置文件:
<MDSConfiguration>
<Settings>
<Setting Key="ThisServerName" Value="this_server" />
<Setting Key="StorageType" Value="SQLite" />
</Settings>
<Servers>
<Server Name="this_server" IpAddress="127.0.0.1" Port="10905" Adjacents="" />
</Servers>
<Applications>
<Application Name="Application1" />
<Application Name="Application2" />
</Applications>
</MDSConfiguration>
4. 开发和运行客户端范例程序
在Visual studio 2010 开发工具下,编写2个简单的Console 应用程序:Application1和Application2。其中,Application1 用来发送消息;Application2 用来接收并显示消息。
在上述程序中,需要添加对 MDSCommonLib 程序集的引用,并且在代码中添加MDS.Client 命名空间的引用。
Application1 发送消息部分的代码如下:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MDS.Client;
namespace Application1
{
class Program
{
static void Main(string[] args)
{
var mdsClient = new MDSClient("Application1");
mdsClient.Connect();
Console.WriteLine("输入文本,并按回车键传送消息给Application2,输入exit退出。");
while (true)
{
var messageText = Console.ReadLine();
if (string.IsNullOrEmpty(messageText) || messageText == "exit")
{
break;
}
var message = mdsClient.CreateMessage();
message.DestinationApplicationName = "Application2";
message.MessageData = Encoding.UTF8.GetBytes(messageText);
message.Send();
}
mdsClient.Disconnect();
}
}
}
Application2 接收消息的代码如下:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MDS.Client;
namespace Application2
{
class Program
{
static void Main(string[] args)
{
//Create MDSClient object to connect to DotNetMQ
//Name of this application: Application2
var mdsClient = new MDSClient("Application2");
//Register to MessageReceived event to get messages.
mdsClient.MessageReceived += MDSClient_MessageReceived;
//Connect to DotNetMQ server
mdsClient.Connect();
//Wait user to press enter to terminate application
Console.WriteLine("输入回车键退出...");
Console.ReadLine();
//Disconnect from DotNetMQ server
mdsClient.Disconnect();
}
/// <summary>
/// This method handles received messages from other applications via DotNetMQ.
/// </summary>
/// <param name="sender"></param>
/// <param name="e">Message parameters</param>
static void MDSClient_MessageReceived(object sender, MessageReceivedEventArgs e)
{
//Get message
var messageText = Encoding.UTF8.GetString(e.Message.MessageData);
//Process message
Console.WriteLine();
Console.WriteLine("接收的消息 : " + messageText);
Console.WriteLine("发送方应用程序 : " + e.Message.SourceApplicationName);
//Acknowledge that message is properly handled
//and processed. So, it will be deleted from queue.
e.Message.Acknowledge();
}
}
}
启动Application1应用程序之后,再次查看MDSManager管理程序,发现Connected Clients由原来的 0 变成 1,说明现在有1个Application1应用程序连接到DotNetMQ服务了。
在Application1的运行窗口,输入消息:
Hello, welcome to www.entlib.com ecommerce system
您好,欢迎访问 www.entlib.com 电子商务平台
启动Application2 应用程序,就可以在Application2的应用程序界面看到接收的消息,如下图所示。
最后,在Application1应用程序输入 exit 退出应用程序。当然在Application2 应用程序最后也可输入 exit 退出应用程序。
如果Application1应用程序启动,并发送消息;而Application2应用程序尚未启动,Application1发送的消息则默认存放在SQLite 数据库中,关于SQLite数据库的简单介绍,可参考:SQLite 开源的嵌入式关系数据库
参考链接: