现在的位置: 首页 > 综合 > 正文

C#基础之 — 消息队列例子

2019年10月14日 ⁄ 综合 ⁄ 共 1746字 ⁄ 字号 评论关闭

本机上创建一个消息队列:

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);
                }
            }
        }

抱歉!评论已关闭.