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

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 消息队列的更多相关文章

  1. 开源消息队列:NetMQ

    NetMQ 是  ZeroMQ的C#移植版本. ZeroMQ是一个轻量级的消息内核,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. ...

  2. 消息队列NetMQ 原理分析1-Context和ZObject

    前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...

  3. 消息队列NetMQ 原理分析2-IO线程和完成端口

    消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...

  4. 消息队列NetMQ 原理分析3-命令产生/处理和回收线程

    消息队列NetMQ 原理分析3-命令产生/处理和回收线程 前言 介绍 目的 命令 命令结构 命令产生 命令处理 创建Socket(SocketBase) 创建连接 创建绑定 回收线程 释放Socket ...

  5. 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe

    消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...

  6. 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord

    消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...

  7. NetMQ:.NET轻量级消息队列

    前言 首先我现在是在一家游戏工作做服务端的,这几天我们服务端游戏做了整个底层框架的替换,想必做过游戏的也都知道,在游戏里面会有很多的日志需要记录,量也是比较大的:在没有换框架之前我们存日志和游戏运行都 ...

  8. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  9. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

随机推荐

  1. dreamwave基础

    WEBcs架构需要在客户段安装程序, 需要安装程序, 工作量会比较大, 需要安装和维护, 比如以后系统升级, 会很麻烦. 优点是一些业务逻辑可以在客户端, 可以减少服务器的一些压力, 客户端的界面操作 ...

  2. Redis的简介

    Redis 简介 Redis 是一个高性能的key-value数据库.支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储... Redis是一个nosql,非关系型数据 ...

  3. GridView中如何实现自定义时间货币等字符串格式?

    方法一: <asp :GridView ID="GridView1" runat="server"> <columns> <asp ...

  4. 转)安装svn服务器

    以下转载自:http://www.linuxidc.com/Linux/2015-01/111956.htm 安装 安装软件包: sudo apt-get install subversion 配置 ...

  5. mongo嗅探器mongosniff

    mongo嗅探器 在更高版本被mongoreplay取代. 安装: 在Ubuntu直接apt-get install mongodb即包含有. 使用方法 直接--help查看使用方法,一般使用: mo ...

  6. Python错误:close failed in file object destructor

    我遇到的情况: 二进制程序调shell再调Python后,shell退出,Python进程挂到init上(不是僵尸进程),但 此时二进制程序未退出,这时候中断而二进制程序出现此提示. 经查询: 应该是 ...

  7. 找不到reportviewer控件在哪儿

    請自行加入ReportViewer(9.0)到工具箱之中. 如下圖,

  8. JSF控件的immediate属性和页面生命周期

    JSF中的控件基本都有immediate属性,对于这个属性的使用总结如下,更详细内容可参考Oracle官方文档. 1,为了更好的理解immediate属性,先看一下JSF页面的生命周期: JSF页面的 ...

  9. win2003上传文件限制

    Windows2003系统下,上传较大的文件时,会出现“Request 对象 错误 'ASP 0104 : 80004005'”错误或者出现空白页面的时候,此时,不要轻易的去找程序的问题,有可能是wi ...

  10. Connecting to MQSeries with .NET

    By connecting to MQSeries withing a .NET application, first it has to be done is to install MQ Serie ...