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 和其他的一些消息 ...
随机推荐
- 利用 AWK 的数值计算功能提升工作效率(转载)
Awk 是一种优秀的文本样式扫描和处理工具.转文侧重介绍了 awk 在数值计算方面的运用,并通过几个实际工作中的例子,阐述了如何利用 awk 的计算功能来提高我们的工作效率.转文源自IBM Bluem ...
- Island Transport
Island Transport http://acm.hdu.edu.cn/showproblem.php?pid=4280 Time Limit: 20000/10000 MS (Java/Oth ...
- Chip Factory(01字典树)
Chip Factory http://acm.hdu.edu.cn/showproblem.php?pid=5536 Time Limit: 18000/9000 MS (Java/Others) ...
- 128. Longest Consecutive Sequence最长连续序列
[抄题]: Given an unsorted array of integers, find the length of the longest consecutive elements seque ...
- 84直方图最大矩形覆盖 · Largest Rectangle in Histogram
[抄题]: Given n non-negative integers representing the histogram's bar height where the width of each ...
- 【原创】Silverlight之TextBox的LostFocus、GotFocus事件
<TextBox x:Name="txtCount" Width="200" Height="35" GotFocus="t ...
- sqlserver数据库维护常用sql
1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...
- linux下nginx tomcat集群
集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都是运行其自己进程的独立服务器. 这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程 ...
- illumina SBS测序详解
illumina SBS测序详解 2018年01月02日 09:33:56 sixu_9days 阅读数:9789 标签: 生物信息学二代测序 更多 个人分类: 测序原理 最近回头重新看了illl ...
- 有符号无符号bit转换
int main(){ unsigned short i = 65434; short p = i; printf("%d", p); int sp; scanf_s(" ...