忘记是看到哪个博客写的了,如有侵权,请见谅!!
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); ???????????} ???????} ???}}
NetMQ 消息队列
原文地址:https://www.cnblogs.com/eimers/p/9086682.html