NetMQ 消息队列

忘记是看到哪个博客写的了,如有侵权,请见谅!!

1.辅助Helper类 (添加System.Messaging引用)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Messaging;
namespace ToolService
{
    public class MQHelp
    {
        /// <summary>
        /// 创建一个消息队列
        /// </summary>
        /// <param name="name">消息队列的名称</param>
        /// <returns>是否创建成功</returns>
        public static bool CreateNewMQ(string name)
        {
            try
            {
                if (!MessageQueue.Exists(".\\private$\\" + name))
                {
                    MessageQueue mq = MessageQueue.Create(".\\private$\\" + name);
                    mq.Label = "private$\\" + name;
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }
        /// <summary>
        /// 删除一个消息队列
        /// </summary>
        /// <param name="name">消息队列的名称</param>
        /// <returns>是否删除成功</returns>
        public static bool DeleteNewMQ(string name)
        {
            try
            {
                if (!MessageQueue.Exists(".\\private$\\" + name))
                {
                    MessageQueue.Delete(".private$\\" + name);
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }
        /// <summary>
        /// 发送消息到指定消息队列
        /// </summary>
        /// <param name="mq_name">消息队列名</param>
        /// <param name="msg_lable">消息头</param>
        /// <param name="msg_body">消息体</param>
        public static void SendMssage(string mq_name, string msg_lable, string msg_body)
        {
            try
            {
                MessageQueue mq = new MessageQueue(@".\private$\"+mq_name);
                Message message = new Message();
                message.Label = msg_lable;
                message.Body = msg_body;
                mq.Send(message);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
        /// <summary>
        /// 从指定消息队列获取第一条消息
        /// </summary>
        /// <param name="mq_name">消息队列名称</param>
        /// <returns>消息内容</returns>
        public static Message ReceiveMessage(string mq_name)
        {
            try
            {
                MessageQueue mq = new MessageQueue(@".\private$\" + mq_name);
                if (mq.GetAllMessages().Length > 0)
                {
                    Message message = mq.Receive();
                    if (message != null)
                    {
                        message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
                    }
                    return message;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {

                throw ex;
            }
           
        }

    }
}

 

2.执行

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ToolService;
using System.Timers;
using System.Messaging;
using System.Windows;
namespace WindowsMQSend
{
    public partial class FromShow : Form
    {
        private static readonly string mq_name = "textMQ";
        private System.Timers.Timer timer;
        public FromShow()
        {
            InitializeComponent();
            MQHelp.CreateNewMQ(mq_name);
            timer = new System.Timers.Timer();
            timer.Interval = 1000;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(flash);
            timer.Start();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            MQHelp.SendMssage(mq_name,"test",txtInput.Text);
        }
        private void flash(object sender, ElapsedEventArgs e)
        {
            var message = MQHelp.ReceiveMessage(mq_name);
            if (message != null)
            {
                Action hide = delegate () {
                    txtResult.Text += message.Id + " " + message.Label + " " + message.Body + "\n";
                };
                this.BeginInvoke(hide);
            }
        }
    }
}

 

 

 

posted @ 2018-05-25 09:15  名叔  阅读(296)  评论(0编辑  收藏  举报