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 和其他的一些消息 ...
随机推荐
- 利用简单的参数传递来实现单条查询的easyui-datagrid
前一阵子老师给出了一个题目, 说让设计个表格, 学生系统的, 可以查询学生的信息和成绩, 科目自己定, 数据库建表也自己定. 数据库的建表可是建的相当的简陋, 反正老师不是很满意, 后来数据表格做出来 ...
- cmd无法输入中文解决方案
1.regedit 2.选中HKEY_CURRENT_USER-Console,找到LoadConIme,双击,设置值为1,十六进制 3.此时应该已经ok了.如还不行,看一下%systemroot%\ ...
- sqlite小知识
删除数据时,由于缓存关系,数据了文件大小不会一下子减小,可以通过执行vacuum;或新建表时使用自动整理大小来实现. sqlite的大小理论上可以达到140T. 暂时,使用C的api,只能使用不是.开 ...
- Future设计模式
一.什么是Future模型: Future模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用.这类似我们网上订餐订座,只要一个电话,客服就告诉我们已经预定成功(实际客服MM啥都还没做好) ...
- 清除Pycharm设置的方法
Mac 按需运行下面的 rm 删除命令 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches rm -rf ~/Library/ ...
- JS 读取本地Excel文件
首先我们先引用一个Excel的类库xlsx.full.min.js 中间处理: 'use strict'; var ExcelReader = { isFirstRead: true, fixdata ...
- Oracle LOOP循环控制语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- Mockplus教程:分分钟搞定APP首页原型设计
Mockplus是一款快速原型设计工具,支持包括APP原型在内的多种原型与线框图设计.除了快速,Mockplus广受欢迎更因为它极低的上手门槛.今天小编就为大家展示如何用Mockplus在3分钟内完成 ...
- Hibernate不能实时获取MySQL数据库的更新
在hibernate.cfg.xml配置文件中,增加以下内容: <property name="hibernate.connection.provider_class"> ...
- 【Maven】Nexus(Maven仓库私服)下载与安装
Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven仓库 ...