本机上创建一个消息队列:
namespace XXX.XXX.MSMQBuilder { class Program { static void Main(string[] args) { MessageQueue mq = null; //显示创建自身的消息队列 const string queueName = @".\Private$\jiyiqin"; if (!MessageQueue.Exists(queueName)) { mq = System.Messaging.MessageQueue.Create(queueName); Console.WriteLine("创建消息队列完成:" + queueName); } else { mq = new System.Messaging.MessageQueue(queueName); } mq.SetPermissions("Administrator", MessageQueueAccessRights.FullControl); mq.SetPermissions("ANONYMOUS LOGON", MessageQueueAccessRights.FullControl); mq.SetPermissions("Everyone", MessageQueueAccessRights.FullControl); } } }
向远端机器的消息队列发送消息:
namespace SimMesssageSender { class Program { static void Main(string[] args) { const string queueName = @"FormatName:Direct=TCP:192.168.1.100\Private$\jiyiqin"; AsyncMessage message = new AsyncMessage { MessageBody = "测试消息,内容包含超链接 http://xxx.xxx.com/bbs/ ,点击跳转" }; try { //将异步消息发往指定的消息队列 using (MessageQueue msmq = new MessageQueue(queueName)) { msmq.Formatter = new XmlMessageFormatter(new Type[] { typeof(AsyncMessage) }); System.Messaging.Message msg = new Message() { Label = "业务模块异步消息", Body = message }; msmq.Send(msg); } } catch (Exception ee) { Console.WriteLine(String.Format("消息发送失败,原因是:{0}", ee.Message)); } Console.WriteLine("发送完成,按任意键退出..."); Console.ReadKey(); } } }
轮训本机上指定消息队列的消息:
static void ReceiveMsg() { const string queueName = @".\Private$\jiyiqin";// @"FormatName:Direct=TCP:192.168.1.104\Private$\jiyiqin"; while (true) { MessageQueue MQ = new MessageQueue(queueName); System.Messaging.Message message = null; try { message = MQ.Receive(TimeSpan.FromSeconds(3)); } catch (Exception ee) { message = null; Console.WriteLine("从消息队列轮训消息出现异常,原因是:" + ee.Message); //continue; } if (message != null) { message.Formatter = new XmlMessageFormatter(new Type[] { typeof(AsyncMessage) }); AsyncMessage msg = (AsyncMessage)message.Body; Console.WriteLine("轮训线程接收到一个异步消息: UserID is " + msg.UserID); } } }