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);
}
}
}
}
NetMQ 消息队列的更多相关文章
- 开源消息队列:NetMQ
NetMQ 是 ZeroMQ的C#移植版本. ZeroMQ是一个轻量级的消息内核,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. ...
- 消息队列NetMQ 原理分析1-Context和ZObject
前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...
- 消息队列NetMQ 原理分析2-IO线程和完成端口
消息队列NetMQ 原理分析2-IO线程和完成端口 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket 获取超时时间 从完成端口获取处理完的状 ...
- 消息队列NetMQ 原理分析3-命令产生/处理和回收线程
消息队列NetMQ 原理分析3-命令产生/处理和回收线程 前言 介绍 目的 命令 命令结构 命令产生 命令处理 创建Socket(SocketBase) 创建连接 创建绑定 回收线程 释放Socket ...
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe
消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Socket 接口实现 内部结构 Session Option Pipe YPipe Msg Y ...
- 消息队列NetMQ 原理分析5-StreamEngine、Encord和Decord
消息队列NetMQ 原理分析5-StreamEngine,Encord和Decord 前言 介绍 目的 StreamEngine 发送数据 接收数据 流程分析 Encoder V2Encoder V1 ...
- NetMQ:.NET轻量级消息队列
前言 首先我现在是在一家游戏工作做服务端的,这几天我们服务端游戏做了整个底层框架的替换,想必做过游戏的也都知道,在游戏里面会有很多的日志需要记录,量也是比较大的:在没有换框架之前我们存日志和游戏运行都 ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
随机推荐
- E0443类模板 "std::unordered_set" 的参数太多
1>------ 已启动全部重新生成: 项目: QtGuiApplication20190416, 配置: Debug x64 ------1>Uic'ing QtGuiApplicati ...
- struts框架值栈问题三之值栈的创建和ActionContext对象的关系
3. 问题三 : 值栈对象的创建,ValueStack 和 ActionContext 是什么关系? * 值栈对象是请求时创建的 * ActionContext是绑定到当前的线程上(一个Action访 ...
- Golang之hello,beego
学习谢大神的beego记录 过程: 目录结构: 编译命令: go build -o myBeego.exe go_dev/day13/beego_example/main执行myBeego.exe即可 ...
- [PHP] constant variable
print: 3.13 PI 3.14
- pip常用操作指令
1.安装模块 pip install vitualenv pip install -r requirement.txt 2.查询模块信息 pip show pip 3.显示已经安装的模块 pip li ...
- Luogu 3959 [NOIP2017] 宝藏- 状压dp
题解 真的想不到这题状压的做法...听说还有跑的飞快的模拟退火,要是现场做绝对滚粗QAQ. 不考虑深度,先预处理出 $pt_{i, S}$ 表示让一个不属于 集合 $S$ 的 点$i$ 与点集 $S$ ...
- datatables分页
一万条以下 var dataTables = $('#dataTables').DataTable(); 一万条以上 var dataTables = $('#dataTables').DataTab ...
- [SoapUI] How to create a random UUID in each Request's Headers
${=java.util.UUID.randomUUID()} is OK
- 如何在win 2008 server和win 7上add web site
在 windows 2008 server 英文版的操作系统上,通过桌面上的 Computer 右键选择 Manage ,打开 Server Manager,选中左侧资源树中的Roles 在上图右侧 ...
- struts2值栈ValueStack中都有哪些东西?
com.opensymphony.xwork2.dispatcher.HttpServletRequest application com.opensymphony.xwork2.dispatcher ...