【教程】Unity 联动 MSMQ 消息通讯

news2024/11/25 6:58:25

开发平台:Unity 2021.3.7
通讯平台:Windows 10
依赖DLL:System.Messaging.dll

一、本文目标


  了解与操作 Windows 平台上建立 Unity 与 MSMQ 通讯机制。实现基础的通讯功能。

二、准备:启用 MSMQ 服务项


注意默认情况下,Windows 平台未启用 MSMQ 服务项内容。若使用该服务功能,需要手动启用。


2.1 访问 “程序与功能” 页面

操作说明:Win+R 访问 “appwiz.cpl**” 或 **控制面板 打开 ”程序和功能“。选择 “启用或关闭Windows功能”。

在这里插入图片描述

2.2 启用 MSMQ 服务项

操作说明:开启 “Microsoft 消息队列(MSMQ)服务器” 项及其所有子项。

在这里插入图片描述

2.3 检查 MSMQ 服务是否启动

操作说明:Win+R 访问 “compmgmt.msc” 或 右键“此电脑”->管理 打开 “计算机管理” 界面。

在这里插入图片描述
查看 服务和应用程序 是否更新“消息队列”项。若更新,则 MSMQ 服务启动成功。

2.4 配置消息队列

操作说明:右键 “消息队列” - 属性 - 服务器安全性,关闭所有选项。

在这里插入图片描述

对消息队列有了解的可以视情况更改配置。为避免连接过程中出现问题,初次接触建议关闭所有。

三、准备:引入 System.Messaging.dll


注意默认情况下,Unity Editor 内部无法访问到 System.Messaing.dll 中方法。实现 CSharp 与 MSMQ 之间的通讯行为严格依赖此库中方法。

  由于在前期测试中,使用互联网来源的 System.Messaging.dll 作为外部引入库,出现无法建立消息队列连接、创建新消息队列等操作行为。为保证 DLL 文件最新与适用性。将来源更新为系统内置中获取。


外网链接:关于 System.Messaging.dll 存在的目录

在这里插入图片描述

  • 本文使用DLL参考上图,前往目录:C:\Windows\Microsoft.NET\Framework\v2.0.50727 获取DLL。

四、MSMQ 程序操作


在这里插入图片描述

4.1 创建 MessageQueue 消息队列

public static MessageQueue CreateMessageQueue(string queueName) {
	if (!MessageQueue.Exists(queueName)) 
		MessageQueue.Create(queueName); 
    return new MessageQueue(queueName);
}
  • MessageQueue.Create(string name):创建消息队列对象。
    注意:此处的消息队列名称严格关联 MSMQ 配置队列名称。

4.2 添加消息至队列中

public static void Send<T>(this MessageQueue queue, object message)
{
	queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
	queue.Send(message);
}
  • 消息对象类别可以是任意对象类型进行存储。存储的数据内容可从 MSMQ 消息队列中查看详细。
  • Send:消息添加方法

4.3 向队列监听消息

public static T Receive<T>(this MessageQueue queue)
{
	queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
	return (T)queue.Receive().Body;
}
  • Receive().Body:返回最新的队列数据信息。
    如果队列信息未更新,将持续返回历史最新的那条数据信息。

五、关于 MSMQ 监听消息的额外说明

注意queue.Receive().Body 是一个异步等待方法。对 Unity 主线程运行有阻碍影响。即在当前 MSMQ 监听队列中无任何消息对象时,会等待并持续获取最新消息对象。当且捕获到消息对象时,返回结果。

  在涉及一些定时捕获消息时,选择使用下述方法进行替代处理:

public static T Receive<T>(this MessageQueue queue)
{
    queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(T) });
    if(queue.GetAllMessages().Length > 0)
    {
		return (T)queue.Receive().Body;
	}
	return null;
}
  • MessageQueue.GetAllMessages():获取指定消息队列中所有信息记录。

六、关于数据对应说明


消息队列类目:

  • 传出队列:“待测试”
  • 专用队列:\Private$\
  • 系统队列:

联网服务器IP:

  • 本地服务:“.”(是的,是这样)
  • 联网服务:“”(待测试)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作符——区别C++前置++和后置++

这里写目录标题 1.问题引出Q:重载或者--的时候如何区分前置和后置&#xff1f; 2.C规范3.前后置实现4.为什么i;可以 i&#xff1b;不行 1.问题引出 Q:重载或者–的时候如何区分前置和后置&#xff1f; 以前C对前置和后置没有很好的办法可以区分&#xff0c;为了解决这个问题&…

面试之SpringAOP的理解:

AOP(面向切面编程)指的是那些业务本身无关&#xff0c;但是被业务模块所共同调用的业务逻辑或责任&#xff08;日志管理&#xff0c;权限管理等&#xff09;封装起来&#xff0c;便于减少系统的重复代码&#xff0c;降低系统见的耦合性&#xff0c;有利于未来系统的扩展性。 S…

IOS开发工程师的发展前景怎么样

本文目录一览 1&#xff0c;iOS开发工程师就业前景怎么样2&#xff0c;北大青鸟java培训IOS开发前景怎么样3&#xff0c;iOS开发工程师就业前景怎么样4&#xff0c;作为一个iOS开发程序员我的未来何去何从5&#xff0c;IOS开发工程师的发展前景怎么样6&#xff0c;ios开发工程…

Ubuntu 20.04 L2TP VPN 自动重连脚本,cron定时任务设置

1、连接VNP脚本 reconnect_l2tp_vpn.sh #!/bin/sh ppp0_flagifconfig | grep ppp0 echo $ppp0_flag if [ -z "$ppp0_flag" ];thenecho "connet to vpn ..."# connet vpn# echo PASSWORD &#xff5c; sudo -S 这样可以不用手动输入密码!echo abc123| su…

我爱学QT-QT信号和槽

1.给控件改名字 为了分析代码方便&#xff0c;我们要给控件改名字。要通俗易懂。 2.信号和槽 信号&#xff1a;信号就是指控件发出的特定的信号。 比如按钮的信号 槽&#xff1a;槽就是槽函数的意思&#xff0c;我们可以把槽函数绑定在某一个控件的信号上。 3.怎么关联信号…

IntelliJ IDEA中生成jar包并运行

1. 过程 依次选择菜单&#xff1a;File->Project Structure…&#xff0c;打开“Project Structure”界面。 在打开界面的左侧列表中选择&#xff1a;Artifacts&#xff0c;点击右侧出现的号。 在出现的菜单中依次选择&#xff1a;JAR->From modules with dependencies…

家政行业丨制作便捷高效的家政小程序

随着现代生活节奏的加快和家庭需求的多样化&#xff0c;越来越多的人开始寻找一种更方便、更高效的方式来获取家政服务。而家政小程序的兴起为这一需求提供了理想的解决方案。本文将简要介绍家政小程序是什么&#xff0c;探讨家政小程序的好处&#xff0c;并提供一些制作搭建家…

element上传文件对格式限制的处理

需求&#xff1a;上传的文件格式必须是pdf格式&#xff0c;方便查看 规定多种格式用逗号隔开 使用这个属性可以规定上传文件格式&#xff0c;但是有bug 可以手动改变显示的文件类型&#xff0c;还是可以传其他文件类型 所以需要在上传的时候限制上传的文件格式 上传组件 <…

X2000 Linux 调试VL53L4CD

由于VL53L4CD具有更高的精度&#xff0c;更低的功耗&#xff0c;所以尝试将VL53L4CD移植到X2000上进行测试。 一、下载驱动 en.VL53L4CD_LinuxDriver 二、SDK中加入驱动 1、加入源码 在\module_driver\devices下创建VL53L4CD文件夹&#xff0c;再将\en.VL53L4CD_LinuxDriver…

网络爬虫-jd滑块验证码

仅供研究学习使用。 目标站点 --> 京东网页登录 当我们输入账号密码后&#xff0c;点击登录&#xff0c;首先映入眼帘的是一个滑块&#xff0c;那我们先分析一下滑块吧。 上图是滑块的有关信息&#xff0c;左边的横线是请求的url&#xff0c;右边是参数&#xff0c;很显然&…

敏捷测试自动化

目录 前言&#xff1a; 敏捷宣言 敏捷软件开发VS传统方法 敏捷云服务 对什么进行自动化&#xff1f; 测试自动化的技巧 关于敏捷测试和自动化测试的关键信息 前言&#xff1a; 敏捷测试自动化是在敏捷开发环境中使用自动化工具和技术来支持测试活动的一种方法。它旨在提…

SQL使用(一):如何使用SQL语句去查询第二高的值

今天刷MYSQL题的时候刷到这样一个题&#xff1a; 编写一个 SQL 查询&#xff0c;获取 Employee 表中第二高的薪水&#xff08;Salary&#xff09; 。------------| Id | Salary |------------| 1 | 100 || 2 | 200 || 3 | 300 |------------例如上述 Employee 表&a…

时间序列预测 | Matlab自回归差分移动平均模型ARIMA时间序列预测,可实现多步预测,对未来的数据实现预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab自回归差分移动平均模型ARIMA时间序列预测,可实现多步预测,对未来的数据实现预测 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% …

C语言比较容易出错的printf语句/cout语句

请问以下代码的输出结果是什么&#xff1f; int main() {int n 2;//cout << n << n << n--;printf("%d %d %d", n, n, n--);system("pause");return 0; } 结果&#xff1a; 很奇怪&#xff1f; 为什么会这样&#xff1f; 原来自己之…

MOVEit再现新漏洞,多个版本受影响

今年6月&#xff0c;文件共享工具MOVEit Transfer曾曝出SQL 注入漏洞&#xff0c;能让远程攻击者访问其数据库并执行任意代码。最近&#xff0c;MOVEit Transfer 母公司Progress Software又披露了三个新漏洞。 这三个漏洞分别是 CVE-2023-36932、CVE-2023-36933 和 CVE-2023-36…

【ACL 2023】具有高效推理速度的中文领域文图生成扩散模型和工具链

近日&#xff0c;阿里云机器学习平台PAI与华南理工大学合作&#xff08;阿里云与华南理工大学联合培养项目&#xff09;在自然语言处理顶级会议ACL2023上发表了具有高效推理速度的中文领域文图生成扩散模型和工具链Rapid Diffusion。它是面向中文特定领域的文图生成模型&#x…

了解MQL4,轻松自定义外汇交易收益曲线

外汇交易是现代社会中增长最快的交易形式之一&#xff0c;而MQL4编程语言是一种针对外汇交易的编程语言。熟练使用MQL4编程语言可以帮助交易者轻松自定义外汇交易收益曲线。本文将介绍什么是MQL4&#xff0c;以及如何使用MQL4来自定义外汇交易收益曲线。 一、什么是MQL4 MQL4…

MyBatis 中的 SQL 映射文件如何配置参数映射,如何使用

MyBatis 中的 SQL 映射文件如何配置参数映射&#xff0c;如何使用 MyBatis 是一种开源的 Java 持久化框架&#xff0c;它可以自动将数据库中的数据映射到 Java 对象中&#xff0c;并且使得 Java 对象可以非常方便地存储到数据库中。在 MyBatis 中&#xff0c;SQL 映射文件是一…

Tomcat之安装与项目部署

Tomcat是一个免费、开源的javaWeb轻量级应用服务器 优于是使用Java开发的&#xff0c;需要运行在java虚拟机中&#xff0c;所以必须安装jdk&#xff0c;以提供运行环境。 Tomcat可以看做一个http服务器&#xff0c;通过组件Connector接收http请求并解析&#xff0c;然后把结果…

Xmake v2.8.1 发布,大量细节特性改进

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…