docker安装RabbitMQ,开启mqtt协议,并且SpringBoot继承mqtt

server/2024/10/19 14:30:18/

介绍

MQTT(消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。

特点

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;

对负载内容屏蔽的消息传输;

使用TCP/IP提供网络连接;

有三种消息发布服务质量;

  1. 至多一次:消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  2. 至少一次:确保消息到达,但消息重复可能会发生。
  3. 只有一次:确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。

1.安装RabbitMQ

基于Docker来安装RabbitMQ,使用下面的命令即可:

java">docker run \
-e RABBITMQ_DEFAULT_USER=mq \
-e RABBITMQ_DEFAULT_PASS=123456 \
-v mq-plugins:/plugins \
--name mq \
--hostname mq \
-p 15672:15672 \
-p 5672:5672 \
-p 1883:1883 \
-p 15675:15675 \
-d \
rabbitmq:3.8-management

命令解释:

  • -e RABBITMQ_DEFAULT_USER=itheima: 设置 RabbitMQ 的默认用户名为 syd。
  • -e RABBITMQ_DEFAULT_PASS=123321: 设置 RabbitMQ 的默认密码为 123456。
  • -v mq-plugins:/plugins: 将主机上的 mq-plugins 挂载到容器内的 /plugins 目录,以便于使用自定义插件。
  • --name mq: 指定容器的名称为 mq
  • --hostname mq: 设置容器的主机名为 mq
  • -p 15672:15672: 映射容器的 15672 端口(管理界面)到主机的 15672 端口。
  • -p 5672:5672: 映射容器的 5672 端口(AMQP 协议)到主机的 5672 端口。
  • -d: 以分离模式运行容器。

可以看到在安装命令中有两个映射的端口:

  • 15672:RabbitMQ提供的管理控制台的端口
  • 5672:RabbitMQ的消息发送处理接口
  • 1883: mqtt协议端口号

安装完成后,我们访问 http://192.168.150.101:15672即可看到管理控制台。首次访问需要登录,默认的用户名和密码在配置文件中已经指定了。

登录后即可看到管理控制台总览页面:

2.使用mqtt协议

命令

java">docker exec mq rabbitmq-plugins enable rabbitmq_management
docker exec mq rabbitmq-plugins enable rabbitmq_mqtt
docker exec mq rabbitmq-plugins enable rabbitmq_web_mqtt

我们可以看到,存在了mqtt协议

3.安装mqtt连接工具MQTTX

新建连接:

新建订阅

输入订阅名:

发消息测试:

4.springBoot集成mqtt

GitHub - tocrhz/mqtt-spring-boot-starter: MQTT starter for Spring Boot, easier to use.

4.1安装依赖

java">        <dependency><groupId>com.github.tocrhz</groupId><artifactId>mqtt-spring-boot-starter</artifactId><version>1.2.8.1</version></dependency>

4.2 配置

java">mqtt:uri: tcp://192.168.152.130:1883username: 'syd'password: '123456'client-id: ${random.uuid}disable: false

4.3 使用

订阅:

java">@Component
@Slf4j
public class MqttMessageHandler {@MqttSubscribe("test/send")public void sub(String topic, MqttMessage message, @Payload String payload) {log.info("receive from    : {}", topic);log.info("message payload : {}", new String(message.getPayload(), StandardCharsets.UTF_8));log.info("string payload  : {}", payload);}}

发送:

java">@RestController
public class Send {private final MqttPublisher publisher;public Send(MqttPublisher publisher) {this.publisher = publisher;}@GetMapping("/send")public  void send(){publisher.send("test/send", "你好!");}}

客户端订阅

当然也可以根据需要发送响应的数据格式;

一些其他配置,根据需要选择


http://www.ppmy.cn/server/131496.html

相关文章

电脑查不到IP地址是什么原因?怎么解决

在日常使用电脑的过程中&#xff0c;有时会遇到无法查询到电脑IP地址的情况&#xff0c;这可能会影响到网络的正常使用。本文将探讨电脑查不到IP地址的可能原因&#xff0c;并提供相应的解决方案。 一、原因分析 ‌网络连接问题‌&#xff1a;首先&#xff0c;网络连接不稳定或…

vue面试题

一、keep-alive 在软件开发中&#xff0c;缓存组件是提高应用程序性能和响应速度的重要手段。特别是在前端框架如Vue.js中&#xff0c;缓存组件的技术被广泛使用。下面将详细介绍如何缓存当前组件、缓存后的更新机制&#xff0c;以及我对Vue.js中keep-alive组件的理解。 1.缓…

Leetcode 3319. K-th Largest Perfect Subtree Size in Binary Tree

Leetcode 3319. K-th Largest Perfect Subtree Size in Binary Tree 1. 解题思路2. 代码实现 题目链接&#xff1a;3319. K-th Largest Perfect Subtree Size in Binary Tree 1. 解题思路 这一题其实就是一个很常见的树的遍历&#xff0c;我们自底向上遍历每一个子树&#x…

ASP.NET MVC 下拉框的传值-foreach循环

数据表&#xff1a; -- 创建包裹分类表 CREATE TABLE PackageCategories (CategoryID INT PRIMARY KEY IDENTITY(1,1), -- 分类ID&#xff1a;整数类型&#xff0c;主键&#xff0c;自增&#xff0c;包裹分类的唯一标识CategoryName NVARCHAR(255) NOT NULL -- 包裹分类名称&a…

百度搜索引擎是如何解决用户点击率与网站排名关联度的呢?

百度搜索引擎是如何解决用户点击率与网站排名的关联度 大家好&#xff0c;我是林汉文&#xff08;SEO专家&#xff09;&#xff0c;今天我们来讨论一个非常有意义的话题&#xff1a;百度搜索引擎是如何解决用户点击率与网站排名的关联度&#xff0c;在当今搜索引擎优化&#x…

大数据毕业设计选题推荐-招聘信息数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

react hooks中在setState后输出state为啥没有变化,如何解决

在 React Hooks 中&#xff0c;setState 的概念被 useState 或 useReducer 钩子所替代。与类组件中的 setState 一样&#xff0c;这些钩子也是异步更新状态的。因此&#xff0c;如果你尝试在调用 setState&#xff08;即 setXXX 函数&#xff09;后立即读取状态值&#xff0c;你…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-13目录1. The Cognitive Capabilities of Generative AI: A Comparative Analysis with Human Benchmarks2. WALL-E: World Alig…