rabbitmq之mqtt的坑(qos2 not supported for connection)

2 篇文章 0 订阅
1 篇文章 0 订阅

之前的文章中我也有介绍mqtt,这次遇到一个问题,让我百思不得其解,由于之前在我的调试之下解决了问题,主要是部署在服务器上的mqttServer用的clientid和我本地测试用的代码用的clientid重复了,后来纠正后可以正常使用了,但是最近又不能用了,想想哪里肯定又又设置问题了。
遇到这种问题的解决思路有。

1.首先想想最近做了什么可能会影响到rabbitmq?
2.查看rabbitmq下的log日志,查看配置报什么错
3.在服务器中进入到rabbitmq的日志中,用cd /var/log/rabbitmq
tailf rabbit@dev-shxjhl-shipinzhuang-01.log
加载日志,然后再调用mqtt,看看报什么错

以下是报错信息
image.png
主要报错信息是qos2 not supported,意思是不支持rabbitmq_web_mqtt
于是我进入到服务器执行了rabbitmq-plugins enable rabbitmq_web_mqtt发现是not found
image.png

然后执行指令rabbitmq-plugins list查看,再rabbitmq_mqtt前面有E*说明插件已经安装并启用,但是rabbitmq_web_mqtt确没有,所以怀疑是rabbitmq的版本问题。于是查看官网发现rabbitmq的最新版本是3.7.9,而我centos上的版本是3.6的,怪不到没有rabbitmq_web_mqtt插件了。于是我重新下载了最新版本的rabbitmq,另外还需要使用最新版的elang安装即可.
image.png
安装成功后

1.rabbitmqctl stop_app:关闭应用(关闭当前启动的节点)
2.rabbitmqctl reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用),重置以后,用户,虚拟vhost,都会清除
3.rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的
4.username and password are both "admin"  设置用户名和密码
rabbitmqctl add_user admin admin
rabbitmqctl set_permissions -p / admin".*" ".*" ".*"
rabbitmqctl set_user_tags admin management
设置用户名和密码都是admin,并设置虚拟主机(virtual host的作用就相当于给rabbitmq又设置了另外一个mq服务器,并且每个virtual host都是独立,可以做到解耦,这样在做大型项目的时候,比如订单服务可以设置/order_virtual,短信服务/message_virtual等

本次解决mqtt的qos2 not supported,阅读了以下相关文章,学到的东西还是不少的。

常用mqtt指令:
cd /var/log/rabbitmq
 tailf rabbit@dev-shxjhl-shipinzhuang-01.log  这个主要是查看日志,其他日志也可以使用tailf
1)常用的一些查询和设置命令行
rabbitmqctl list_queues:查看所有队列信息
rabbitmqctl stop_app:关闭应用(关闭当前启动的节点)
rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的
rabbitmqctl reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用),重置以后,用户,虚拟vhost,都会清除
rabbitmqctl force_reset:作用和rabbitmqctl reset一样,区别是无条件重置节点,不管当前管理数据库状态以及集群的配置。如果数据库或者集群配置发生错误才使用这个最后的手段
rabbitmqctl status:节点状态
rabbitmqctl add_user username password:添加用户
rabbitmqctl list_users:列出所有用户
rabbitmqctl list_user_permissions username:列出用户权限
rabbitmqctl change_password username newpassword:修改密码
rabbitmqctl add_vhost vhostpath:创建虚拟主机
rabbitmqctl list_vhosts:列出所有虚拟主机
rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*":设置用户权限
rabbitmqctl list_permissions -p vhostpath:列出虚拟主机上的所有权限
rabbitmqctl clear_permissions -p vhostpath username:清除用户权限
rabbitmqctl -p vhostpath purge_queue blue:清除队列里的消息
rabbitmqctl delete_user username:删除用户
rabbitmqctl delete_vhost vhostpath:删除虚拟主机

相关文章:
chrome调试mqtt
window安装MQTT服务器和client
MQ 客户端收发 MQTT 消息

酷炫MQTT实现消息推送
RabbitMQ远程访问配置
解决RabbitMQ远程不能访问的问题
RabbitMQ远程调用测试用例
rabbitmq_mqtt官网
rabbitmq_web-mqtt官网
rabbitmq常用命令行汇总

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息中间件软件,它实现了AMQP(高级消息队列协议)标准,用于在分布式系统中进行消息的传递和处理。而MQTT(Message Queue Telemetry Transport)是一种轻量级的消息传输协议,常用于物联网和低带宽环境中。 QoS(Quality of Service)是MQTT协议中用于保证消息传输质量的机制。MQTT提供了三个级别的QoS: 1. QoS 0(最多一次投递):消息发布者将消息发送给代理服务器,代理服务器将消息发布给订阅者,不进行消息持久化和重传,消息可能会丢失。 2. QoS 1(至少一次投递):消息发布者将消息发送给代理服务器,代理服务器将消息发布给订阅者,如果订阅者没有确认收到消息,代理服务器会重复发送消息,确保消息至少传递一次。 3. QoS 2(只有一次投递):消息发布者将消息发送给代理服务器,代理服务器将消息发布给订阅者,如果订阅者没有确认收到消息,代理服务器会重复发送消息,直到订阅者确认收到并发送确认给代理服务器,确保消息只传递一次。 在RabbitMQ中,使用MQTT插件可以使用MQTT协议进行消息传输。通过配置RabbitMQ的QoS设置,可以保证消息的传输质量。例如,在生产者端可以设置消息的持久化和重传机制,确保消息可靠地投递给RabbitMQ代理服务器。在消费者端也可以设置QoS级别,确保消费者可以按照需求从RabbitMQ中获取消息。 总结来说,RabbitMQ和MQTT结合使用可以提供高效可靠的消息传输服务。通过合适的QoS级别设置,可以保证消息按需传输和投递,从而满足分布式系统中对消息传输质量的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值