rabbitmq+mqtt+docker-compose搭建MQTT服务器和.netcore 客户端实现 订阅+发布

news2025/2/25 13:05:07

1 搭建MQTT服务器

1.1 Dockerfile 内容

FROM rabbitmq:3.11.6-management
COPY install_rabbitmq_plus.sh /usr/local/
RUN  chmod 777 /usr/local/install_rabbitmq_plus.sh 
RUN  /bin/sh /usr/local/install_rabbitmq_plus.sh 

1.2 容器中需要安装插件的命令  放在 install_rabbitmq_plus.sh 文件中

rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins enable rabbitmq_mqtt
rabbitmq-plugins enable rabbitmq_web_mqtt

1.3 构件容器需要用到的yml配置 docker-compose-RabbitMQ.yaml

version: "3.6"
services:
  #服务
  rabbitmq:
    build:          #镜像构建
      context:  .   #构建镜像时所在的资源路径
      dockerfile: Dockerfile    #构建镜像时需要的dockerfile文件路径
    ports:
      - 5672:5672
      - 15672:15672
      # mqtt端口
      - 15675:15675
      - 1883:1883
    volumes:
      - ./data/rabbitmq:/var/lib/rabbitmq
    environment:
      - TZ=Asia/Shanghai
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=1234
    restart: always

 1.4 docker-compose 启动RabbitMQ以及MQTT插件服务

docker-compose -f docker-compose-RabbitMQ.yaml up --build  -d

2  .net core 实现


using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;
public class XJ_MQTT
    {
        public MqttClient GetClient()
        {
            MqttClient mqttClient = new MQTTnet.MqttFactory().CreateMqttClient() as MqttClient;
            mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync1;
            mqttClient.ConnectedAsync += MqttClient_ConnectedAsync;
            mqttClient.ConnectingAsync += MqttClient_ConnectingAsync;
            mqttClient.DisconnectedAsync += MqttClient_DisconnectedAsync;
            mqttClient.InspectPacketAsync += MqttClient_InspectPacketAsync;
            try
            {
                MqttClientOptionsBuilder optionsBuilder = new MqttClientOptionsBuilder();
                optionsBuilder.WithTcpServer("mqtt的服务器IP", 1883);
                string id = Guid.NewGuid().ToString("N");
                optionsBuilder.WithClientId(id);
                optionsBuilder.WithProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V311);
                optionsBuilder.WithCredentials("root", "1234");
                mqttClient.ConnectAsync(optionsBuilder.Build()).Wait();
            }
            catch (Exception e)
            {
                Console.WriteLine($"连接到MQTT服务器失败" + Environment.NewLine + e.Message + Environment.NewLine);

            }
            return mqttClient;
        }

        private Task MqttClient_InspectPacketAsync(MQTTnet.Diagnostics.InspectMqttPacketEventArgs arg)
        {

            Console.WriteLine($"MqttClient_InspectPacketAsync :{UTF8Encoding.UTF8.GetString(arg.Buffer)}" + Environment.NewLine);
            return Task.CompletedTask;
        }

        private Task MqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg)
        {
            Console.WriteLine("已断开MQTT服务器" + Environment.NewLine);
            return Task.CompletedTask;
        }

        private Task MqttClient_ConnectingAsync(MqttClientConnectingEventArgs arg)
        {

            Console.WriteLine("链接MQTT服务器中...." + Environment.NewLine);
            return Task.CompletedTask;
        }

        private Task MqttClient_ConnectedAsync(MqttClientConnectedEventArgs arg)
        {
            Console.WriteLine("已连接到MQTT服务器" + Environment.NewLine);
            return Task.CompletedTask;
        }

        private Task MqttClient_ApplicationMessageReceivedAsync1(MqttApplicationMessageReceivedEventArgs arg)
        {
            Console.WriteLine($">>ClientId:{arg.ClientId} \r\nTopic:{arg.ApplicationMessage.Topic}\r\nPayload:{Encoding.UTF8.GetString(arg.ApplicationMessage.Payload)}{Environment.NewLine}" + Environment.NewLine);
            return Task.CompletedTask;
        }

    }

2.1 实现发布 

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Packets;
using MQTTnet.Protocol;


var mq = new XJ_MQTT();
var client = mq.GetClient();
while (true)
{
    string input = Console.ReadLine();
    client.PublishStringAsync("testTpic", "payload" + Guid.NewGuid().ToString("N") + ":" + input);
}

2.2 实现订阅

using MQTTnet.Packets;
var mq = new XJ_MQTT();
var client = mq.GetClient();
client.SubscribeAsync(new MQTTnet.Client.MqttClientSubscribeOptions()
{
    TopicFilters = new List<MqttTopicFilter>() { new MqttTopicFilter() { Topic = "testTpic" } }
});
while (true)
    Console.ReadLine();

3 运行效果

 

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

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

相关文章

假如ChatGPT 去面试前端工程师,结果会怎么样?

近日&#xff0c;有个叫 ChatGPT 的同学来我司面试前端&#xff0c;考考他面试八股文。先来问问闭包。 第一问&#xff0c;说说 JS 闭包 追问&#xff0c;详细讲讲闭包 由于篇幅太长&#xff0c;转成文字&#xff0c;以下皆为 ChatGPT 回答 闭包是一个非常重要的 JavaScript 概…

Maven构建Java项目Maven构建项目测试Maven引入外部依赖Maven项目模板

目录 Maven 构建 Java 项目 解释一下这段代码&#xff0c;为什么可以构建一个目录清晰的maven项目“mvn archetype:generate "-DgroupIdcom.companyname.bank" "-DartifactIdconsumerBanking" "-DarchetypeArtifactIdmaven-archetype-quickstart&qu…

volatile的实现简单概述

文章目录 内存屏障volatile关键字的实现synchronized关键字的实现 内存屏障 在讲解是关键字之前&#xff0c;先来了解下内存屏障的概念。 处理器保障禁止内存重排序的指令被称为基本内存屏障。其作用是禁止该屏障前后之间的操作进行重排序&#xff0c;要确保指令前的操作要先…

华为OD机试真题 Java 实现【服务中心选址】【2023Q1 100分 】

一、题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置&#xff0c;并希望能够以此为依据为新的服务中心选址&#xff0c;使服务中心到所有区域的距离的总和最小。 给你一个数组 positions&#xff0c;其中 positions[i] [le…

域名批量查询是否注册-老域名批量查询

域名到期时间批量查询软件 您是否也曾遇到过域名到期或续费时间即将到来&#xff0c;而需要手动一个一个查询每个域名的情况&#xff0c;这不仅费时效率低&#xff0c;还可能会遗漏一些域名。那么&#xff0c;我们为您介绍一款可以帮助您快速、便捷查询多个域名到期时间的软件—…

分享去年学习github命令行操作的笔记

git branch -M main 给远程分支改名 一、本地库操作 1.创建本地目录&#xff0c;用于存储要上传的文本文件。可以手动创建也可以用带命令行 mkdir <文件名> 2.进入文件夹cd <文件名> 3第一次创建时需要初始化仓库git init mac显示隐藏文件SHIFTCOMMAND. mac…

Vue3-黑马(六)

目录&#xff1a; &#xff08;1&#xff09;vue3-基础-vueuse &#xff08;2&#xff09;vue3-基础-useRequest &#xff08;3&#xff09;vue3-基础-usePagination &#xff08;1&#xff09;vue3-基础-vueuse 我们在实际中use函数的封装&#xff0c;不用我们自己写&#…

精准室内定位系统源码,采用UWB定位技术开发的智慧工厂定位系统源码

室内定位系统源码&#xff0c;采用UWB定位技术开发的智慧工厂定位系统源码 技术架构&#xff1a;单体服务 硬件&#xff08;UWB定位基站、卡牌&#xff09; 开发语言&#xff1a;java 开发工具&#xff1a;idea 、VS Code 前端框架&#xff1a;vue 后端框架&#xff1a;s…

Linux基础学习---5、磁盘查看和分区类、进程管理类

1、磁盘查看和分区类 1.1 du查看文件和目录占用的磁盘空间 du:disk usage 磁盘占用情况 1、基本语法du 目录/文件 &#xff08;显示目录下每个子目录的磁盘使用情况&#xff09; 2、情况说明选项功能-h以人们较易阅读的GBytes、MBytes、KBytes等格式自行显示-a不仅查看子目录…

iproute2 和 net-tools 介绍

路由&#xff08;Routing&#xff09; 在网络通信中&#xff0c;“路由”是一个网络层的术语。路由是指设备从一个接口上收到数据包&#xff0c;根据数据包的目的地址进行定向并转发到另一个接口的过程。路由表则是若干条路由信息的一个集合体。在路由表中&#xff0c;一条路由…

用Python+OpenCV+Yolov5+PyTorch+PyQt开发的车牌识别软件(包含训练数据)

目录 演示视频 软件使用说明 软件设计思路 演示视频 这是一个可以实时识别车牌的软件&#xff0c;支持图片和视频识别&#xff0c;以下是软件的演示视频。 车牌识别软件 点击查看代码购买地址 软件使用说明 1. 下载源码后&#xff0c;首先安装依赖库。项目所用到的依赖库已…

卷起来了!阿里最新出品“微服务全阶笔记”,涵盖微服务全部操作

近两年&#xff0c;“大厂裁员”总是凭实力冲上各大媒体头条&#xff0c;身在局中的我们早已习以为常。国内的京东&#xff0c;阿里&#xff0c;腾讯&#xff0c;字节&#xff0c;快手&#xff0c;小米等互联网公司都以不同程度的裁员比例向社会输送人才。大量有大厂经验的卷王…

一起打造漂亮的Ubuntu——2023最新版Gnome44

一起打造漂亮的Ubuntu 对于一个工程师&#xff0c;开发者&#xff0c;研究员来说&#xff0c;拥有一台漂亮的机器外加漂亮的系统界面是非常重要的。 作为Ubuntu十年的忠实粉丝&#xff0c;Linux高度依赖用户&#xff0c;无论是工作还是生活&#xff0c;我都一直以来使用着Ubu…

目标检测基础理论

一、基本知识 目标检测中RP什么意思 在目标检测中&#xff0c;RP通常指的是Recall-Precision&#xff0c;即召回率和精确率。召回率是指模型正确识别出的正样本数占所有正样本数的比例&#xff0c;而精确率是指模型正确识别出的正样本数占所有被模型识别为正样本的样本数的比例…

微服务保护——Sentinel

初识Sentinel 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。 解决雪崩问题的常见方式有四种: 超时处理:设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息&#xff0c;不会无休止等待舱壁…

谷歌浏览器network error解决方法

很多用户在使用谷歌浏览器时候会出现network error网页提示&#xff0c;很多用户不知道该如何处理这一问题&#xff0c;其实解决方法不止一种&#xff0c;小编整理了两种谷歌浏览器network error解决方法&#xff0c;一起来看看吧~ 谷歌浏览器network error解决方法&#xff1…

【精选】新年祝福(C语言),Easyx图形库应用+源代码分享

【精选】新年祝福&#xff08;C语言&#xff09;&#xff0c;Easyx图形库应用源代码分享 博主&#xff1a;命运之光 专栏&#xff1a;Easyx图形库应用 目录 【精选】新年祝福&#xff08;C语言&#xff09;&#xff0c;Easyx图形库应用源代码分享程序展示一、项目环境简单介绍一…

轨道列车救援VR模拟仿真系统

列车故障是地铁运营中常见的问题&#xff0c;如何迅速准确地救援列车故障是保障地铁运营安全的重要措施。为此&#xff0c;广州华锐互动提供轨道列车救援VR模拟仿真系统定制开发&#xff0c;可以在安全、高效的情况下进行列车故障救援演练&#xff0c;有效提高救援人员的应急能…

在 oracle 中执行 sql 语句时,报错:“ORA-00001: 违反唯一约束条件 SYS_C0024202”

在 oracle 中执行 sql 语句时&#xff0c;报错&#xff1a;“ORA-00001: 违反唯一约束条件 SYS_C0024202” 报错信息如下&#xff1a; 表为“WK_ADMIN_USER” 解决方法&#xff1a; 1、查看违反约束的序列对应的数据库表与字段 select a.constraint_name,a.constraint_type,b…

【HTML】

目录 1. 什么是 HTML &#xff1f;HTML 的作用 2. HTML 常见标签 2.1 注释标签 2.2 标题标签&#xff1a;h1 - h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br ​编辑 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.7.1 外…