MSMQ消息队列
MQ是一种企业服务的消息中间节技术,这种技术常常伴随着企业服务总线相互使用,构成了企业分布式开发的一部分,如果考虑到消息的发送和传送之间是可以相互不联系的并且需要分布式架构,则可以考虑使用MQ做消息的中间价技术,MQ的功能已经足够开发使用。
MSMQ 原理
MSMQ的实现原理是:消息的发送者把自己想要发送的信息放入一个容器,然后把它保存到一个系统公用空间的消息队列中,本地或异地的消息接收程序再从该队列中取出发给它的消息进行处理。
消息队列是一个公用存储空间,它可以存在于内存中或物理文件中,因此,消息以两种方式发送,即快递方式和可恢复模式。它们的区别是消息存储位置的不同,快递方式,为了消息的快速传递,所以把消息放置在内存中,而不放在物理磁盘上,以获得较高的处理能力;而可恢复模式在传送过程的每一步骤中,都把消息写入物理磁盘上,这样当保存消息队列的机器发生故障而重新启动后,可以把发送的消息恢复到故障发送之前的状态,以获得更好的消息恢复能力。消息队列可以放在发送方、接收方所在的机器上,也可以单独放置在另外一台机器上。另外,采用消息队列机制,发送方不必要担心接收方是否启动,是否发生故障等因素,只要消息成功发送出去,就可以认为处理完成,而实际上对方可能甚至未开机,或者实际消息传递到对方可能在第二天。MSMQ机制类似QQ消息传递机制。下图演示了MSMQ的实现原理。

公共队列:在整个消息队列网络中复制,有可能由网络连接的所有站点访问。
路径格式为:
机器名称\队列名称
专用队列(或叫私有队列):不在整个网络中发布,它们仅在所驻留的本地计算机上可用,专用队列只能由知道队列的完整路径名称或标签的应用程序访问。
路径格式为:
机器名称\Private$\队列名称
日志队列:包含确认在给定“消息队列中发送的消息回执消息”。
路径格式为:机器名称\队列名称\Journal$
响应队列:包含目标应用程序接收到消息时返回给发送应用程序的响应消息,包括机器日志队列、机器死信队列和机器事务死信队列。其中,
机器信道死信队列对应的格式为:机器名称\XactDeadletterKaTeX parse error: Undefined control sequence: \Deadletter at position 20: …死信队列对应的格式为:机器名称\̲D̲e̲a̲d̲l̲e̲t̲t̲e̲r̲;
机器日志队列对应的格式为:机器名称\Journal$;
优点:稳定、消息优先级、脱机能力以及安全性,有保障的消息传递和执行许多业务处理的可靠的防故障机制。
缺点:MSMQ不适合于Client需要Server端实时交互情况.大量请求时候,响应延迟.
工作组模式或域模式
MSMQ可以安装为工作组模式或域模式。如果安装程序没有找到一台运行提供目录服务的消息队列的服务器,则只可以安装为工作组模式,此计算机上的“消息队列”只支持创建专用队列和创建与其他运行“消息队列”的计算机的直接连接。
《安装与启动服务》

我的电脑 >> 管理 >> 服务和应用程序 >> 消息队列 。出现消息队列则说明安装成功

MSMQ 客户端
using System;
using System.Messaging; // 需要添加System.Messaging引用namespace MSMQClient
{class Program{static void Main(string[] args){//私有队列 、专用队列if (MessageQueue.Exists(@".\Private$\AresWangMSMQ")){// 创建消息队列对象using (MessageQueue mq = new MessageQueue(@".\Private$\AresWangMSMQ")){// 设置消息队列的格式化器mq.Formatter = new XmlMessageFormatter(new string[] { "System.String" });foreach (Message msg in mq.GetAllMessages()){Console.WriteLine("Received Private Message is: {0}", msg.Body);}if(mq.CanRead){//mq.Peek() // 获得消息队列中第一条消息,但删除第一条记录Message firstmsg = mq.Receive(); // 获得消息队列中第一条消息,且删除第一条记录,Console.WriteLine("Received The first Private Message is: {0}", firstmsg.Body);}}}Console.Read();}}
}
MSMQ 服务端
using System;
using System.Messaging;namespace MSMQServer
{class Program{ static void Main(string[] args){// 创建一个公共队列,公共队列只能创建在域环境里//if (!MessageQueue.Exists(@".\AresWangMSMQ")) // 判断此路径下是否已经有该队列//{// using (MessageQueue mq = MessageQueue.Create(@".\AresWangMSMQ"))// {// mq.Label = "AresWangMSMQ"; // 设置队列标签// Console.WriteLine("已经创建了一个公共队列");// Console.WriteLine("路径为:{0}", mq.Path);// Console.WriteLine("队列名字为:{0}", mq.QueueName);// mq.Send("MSMQ Message", "Leaning Hard"); // 发送消息// }//}//if (MessageQueue.Exists(@".\Private$\AresWangMSMQ"))//{// // 删除消息队列// MessageQueue.Delete(@".\Private$\AresWangMSMQ");//}// 创建一个私有消息队列if (!MessageQueue.Exists(@".\Private$\AresWangMSMQ")){using (MessageQueue mq = MessageQueue.Create(@".\Private$\AresWangMSMQ")){mq.Label = "AresWangMSMQ"; Console.WriteLine("已经创建了一个私有队列");Console.WriteLine("路径为:{0}", mq.Path);Console.WriteLine("私有队列名字为:{0}", mq.QueueName);mq.Send("MSMQ Private Message", "AresWangMSMQ"); // 发送消息}}// 遍历所有的公共消息队列//foreach (MessageQueue mq in MessageQueue.GetPublicQueues())//{// mq.Send("Sending MSMQ public message" + DateTime.Now.ToLongDateString(), "Learning Hard");// Console.WriteLine("Public Message is sent to {0}", mq.Path);//}if (MessageQueue.Exists(@".\Private$\AresWangMSMQ")) {// 获得私有消息队列MessageQueue mq = new MessageQueue(@".\Private$\AresWangMSMQ");if(mq.CanWrite){mq.Send("Sending MSMQ private message" + DateTime.Now.ToLongDateString(), "AresWangMSMQ");}Console.WriteLine("Private Message is sent to {0}", mq.Path);}Console.Read();}}
}


相关文章:
MSMQ消息队列
MQ是一种企业服务的消息中间节技术,这种技术常常伴随着企业服务总线相互使用,构成了企业分布式开发的一部分,如果考虑到消息的发送和传送之间是可以相互不联系的并且需要分布式架构,则可以考虑使用MQ做消息的中间价技术࿰…...
树莓派nmap扫描
debian系统安装nmap: sudo apt install nmap安装nmap完成后,输入 ip route 来查看当前Wi-Fi路由器的ip地址。 第一行的default via后显示的便是网关地址,也就是路由器地址。 获取到路由器ip地址后,在终端中输入: …...
【必看】Spring系列面试题
Spring Core Container, AOP, Data Access, Web... 基础 1. 简单介绍Spring 一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 支持 IoC(Inversion of Control:控制反转) 和 AOP(Aspect-Oriented Pro…...
wordpress增加谷歌分析
wordpress增加谷歌分析 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 http://www.huerpu.cc:7000 一、创建谷歌分析账号与媒体应用 谷歌分析地址:https://analytics.google.com/analytics 创建一个账号,如果你没有的话。 在该账…...
linux的信号量的使用
1.信号量 在多线程情况下,线程要进入关键代码就得获取信号量(钥匙){sem_init(&sem, 0, 0);},没有信号量的情况下就一直等待sem_wait(&sem),只到别人把钥匙(sem_post(&sem))给你。 …...
C--贪吃蛇
前言 贪吃蛇游戏是一个耳熟能详的小游戏,本次我们讲解他的简单的实现,需要掌握基本的API知识(http://t.csdnimg.cn/uHH6y),简单的C语言知识和基本的数据结构链表 简单的准备工作 蛇的节点 在游戏运⾏的过程中,蛇每次吃⼀个⻝物,蛇的⾝体就会变⻓⼀节&a…...
element ui的确认提示框按钮样式修改
修改确认提示框的默认按钮样式,使用css强制修改 例: js代码: this.$confirm("您确定要删除吗?此操作无法撤销并且将永久删除所有数据。", "提示", { type: "warning", cancelButtonClass: "…...
【vue】keep-alive:true缓存导致页面数据不刷新
keep-alive生命周期钩子函数:activated、deactivated activated:页面第一次进入的时候,钩子触发的顺序是created->mounted->activated deactivated: 页面退出的时候会触发deactivated, 当再次前进或者后退的时候只触发acti…...
Golang — map的使用心得和底层原理
map作为一种基础的数据结构,在算法和项目中有着非常广泛的应用,以下是自己总结的map使用心得、实现原理、扩容机制和增删改查过程。 1.使用心得: 1.1 当map为nil和map为空时,增删改查操作时会出现的不同情况 我们可以发现&#…...
Oracle如何收缩减小表空间大小
比如我们发现一个表空间占用比较大,但是空闲空间很大,想要减小表空间占用大小。查看表空间的情况 发现BETEST表空间占用大,但是剩余大小比较大,可以减小存储占用。 如果我们想减小到100MB,那么就登录其用户执行&#…...
【爬虫】爬取股票历史K线数据写入数据库(三)
前几天有写过两篇: 【爬虫】爬取A股数据写入数据库(二) 【爬虫】爬取A股数据写入数据库(一) 现在继续完善,分析及爬取股票的历史K线数据通过ORM形式批量写入数据库。 2024/05,本文主要内容如下…...
文心一言指令
文心一言(ERNIE Bot)是百度公司开发的人工智能语言模型,它可以接收各种指令来执行不同的任务。以下是一些可能的指令示例: 知识问答: 指令:“请问什么是人工智能?”文心一言会回答关于人工智能…...
常用的命令技巧总结
java命令执行 如下编码网站: Runtime.exec Payload Generater | AresXs Blogjava.lang.Runtime.exec() Payload Workarounds - Jackson_Thttps://www.bugku.net/runtime-exec-payloads/ 手动编码操作 bash -c {echo,cGluZyAxMjcuMC4wLjE7ZWNobyAxID50ZXN0LnR4dA}|…...
T97燃脂咖啡招商模式,私域分销模式设计
t97燃脂咖啡招商模式,希柔T97微商模式,社交电商系统 坐标:厦门,我是易创客肖琳 深耕社交新零售行业10年,主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 低卡咖啡第一品牌“T97”,突然…...
触摸OpenNJet,感悟云原生
小程一言 云原生使得应用充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。 云原生技术的用处在于提高应用程序的可靠性、可伸缩性和灵活性,加快开发和部署速度,降低成本,提升整体的效率和竞争力。通过采用云原生技术&a…...
UE4 自定义shader获取灯光位置
UE4.26:How to get the direction of specific directional lights in custom node material? - #4 by Arkiras - Rendering - Epic Developer Community Forums 获取灯光位置的shader,应该是这个了...
机器学习(五) ----------决策树算法
目录 1 核心思想 2 决策树算法主要步骤 3 决策树算法的分类 3.1 ID3算法(Iterative Dichotomiser 3): 3.1.1 基本步骤 3.1.2 原理 信息增益 3.1.3 注意事项 3.2 C4.5算法: 3.2.1. 信息增益率 计算公式 3.2.2. 构建决策…...
Redis的数据完全是存在内存中的吗?
是的,Redis的数据完全是存储在内存中的。这也是Redis能够提供非常高速的读写性能的主要原因,尤其适用于需要快速响应的应用场景。然而,虽然Redis将所有数据存储在内存中,但它也提供了持久化机制,可以将数据异步地保存到…...
Linux开发--Linux设备驱动核心
Author: cpu_codeDate: 2020-06-30 16:15:35LastEditTime: 2020-07-01 17:59:23FilePath: \md\Linux\6818_Linux驱动.mdGitee: https://gitee.com/cpu_codeCSDN: https://blog.csdn.net/qq_44226094 Linux设备驱动核心概念 Linux内核中断处理 Linux操作系统下同裸机程序一样…...
vue3引入vant完整步骤
在Vue 3中引入Vant(一个基于Vue的移动端UI组件库)的完整步骤通常包括以下几个部分: 安装Vue CLI(如果你还没有安装的话): npm install -g vue/cli 创建一个新的Vue项目: 假设你希望项目名为my…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
