mqtt协议实现即时通讯-activemq nginx.支持JS,JAVA,微信小程序

2023-10-29

MQTT协议通信

 

简述:

           使用MQTT协议实现后台推送、及时通信等功能。本案例实现了web-js端、微信小程序端、Java client端、Java server端

软件版本:

           Nginx:openresty-1.13.6.1-win32

http://openresty.org/cn/

           Activemq:apache-activemq-5.15.2

           http://activemq.apache.org/download.html

小程序端Mqtt.js:github上牛人在原eclipse开源的mqtt31.js上修改符合小程序使用的

https://github.com/tennessine/paho.mqtt.wxapp

https://unpkg.com/paho-wxapp@1.0.3/target/paho-mqtt.js

微信小程序:github上的微信客户端:

https://github.com/sqwsummerwind/mqtt-wechat-applet-client

JS端、Java client端、Java Server 端、安卓端等:

http://www.eclipse.org/paho/downloads.php

案例运行环境:

           Windows7、jdk 8、小程序工具V1.02.1804120、Springboot-1.5.10

环境安装:

           一、Jdk8 安装

                     省略,自行安装

           二、apache-activemq-5.15.2

                     1.下载windows版:http://activemq.apache.org/activemq-5152-release.html

 

2.解压

 

3.配置修改(建议不做修改)

${active-home}\conf\activemq.xml支持的协议:

 

tips:wss为后来验证所加,内部nginx跳转仅连接ws即可

4.启动

${active-home}\bin\win64目录执行activemq.bat脚本即可

 

启动信息:

 

tips:可以看到启动支持的一些协议连接url

5.网页端请求,默认端口8161:

http://localhost:8161/

 

登录:admin/admin

查看连接信息:

 

至此,ACTIVEMQ完成

三、Nginx安装(主要适应微信小程序使用mqtt连接,js和java端可无需该支持)

本案例使用openresty,集成了各种插件,特别是对于Lua的支持。普通的nginx不在本文考虑范围内

1.下载,选择win版本

http://openresty.org/cn/download.html

 

2.解压到目录:

 

可以看到扩展了很多东东,集成了openssl(本案例重点),还支持了lua脚本(接触重点)

3.证书生成(有证书忽略本节)

3.1 windows openssl 下载,选择对应的win版本

http://slproweb.com/products/Win32OpenSSL.html

 

3.2环境变量配置:

变量名:OPENSSL_HOME

变量值:openssl安装地址 如:C:\OpenSSL-Win64\bin

Path添加配置:%OPENSSL_HOME%

3.3生成证书(证书名称自定义)

进入任何目录,如${openresty}\conf,进入CMD命令窗口

3.3.1 创建私钥

openssl genrsa -des3 -out mqtt.key 1024

 

输入两次密码:123456

3.3.2 创建csr证书

openssl req -new -key mqtt.key -out mqtt.csr

 

执行完以上步骤后,生成文件如下:

 

3.3.3 免密操作

tips: 在加载SSL支持的Nginx并使用上述私钥时除去必须的口令,否则会在启动nginx的时候需要输入密码

重命名mqtt.key文件为mqtt.key.org

                     去除口令:

                     opensslrsa -in mqtt.key.org -out mqtt.key

                    

                     3.3.4生成crt证书

                     opensslx509 -req -days 365 -in mqtt.csr -signkey mqtt.key -out mqtt.crt

 

最终生成文件如下:

 

4.nginx ssl配置

拷贝上一步生成的证书生成的crt和key文件到 ${openresty-home}\conf目录下

4.1 修改${openresty-home}\conf\nginx.conf文件,添加如下内容:

events {

  worker_connections  1024; ## Default: 1024

}

 

尾部添加

include ${openresty-home}\conf\wss.conf;# 这里我们将反向代理新建一个文件引入进来

client_max_body_size    3m;# 上传大小单位M 微信小程序上传大图片时可能需要设置

 

4.2 在${openresty-home}\conf\wss.conf目录下新增wss.conf配置文件内容如下:

#主要是配置原来的ws 和 http 接口

upstream websocket {

# 远程websocket服务器地址,此处配置连接activemqws连接

server 172.16.80.194:61614;

}

#upstream web{

#    server www.xxx.com;# 远程http接口

#}

# 通过下面的反向代理到上面的接口去

server {

    listen 443;#默认https和wss协议端口

    ssl on;

    ssl_certificateD:\developer\openresty-1.13.6.1-win32\conf\mqtt.crt;#你的上传到服务器的证书位置

    ssl_certificate_keyD:\developer\openresty-1.13.6.1-win32\conf\mqtt.key;#你的上传到服务器的证书位置

    ssl_session_timeout 5m;

    ssl_session_cacheshared:SSL:50m;

    ssl_protocols SSLv3 SSLv2TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphersALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

    underscores_in_headerson;#开启自定义头信息的下划线

    #wss协议转发 小程序里面要访问的链接

    location /mqtt {

        proxy_passhttp://websocket;#代理到上面的地址去

        proxy_http_version1.1;

        proxy_set_headerUpgrade $http_upgrade;

        proxy_set_headerConnection "Upgrade";

                    

                     proxy_redirectoff;

                    

                     #重要配置,解决小程序连接 Sec-WebSocket-Protocol错误提示

                     proxy_set_headerSec-WebSocket-Protocol mqtt;

        more_clear_headersSec-WebSocket-Protocol;

    }

    #https协议转发 小程序里面要访问的链接

    #location /{

    #         proxy_pass http://web;#代理到原有的http的地址去

           #        proxy_set_header   X-Real-IP        $remote_addr;

    #   proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

           #        add_header Access-Control-Allow-Origin*;#跨域访问设置

    #}

}

 

5.测试&启动

Cmd命令,进入openresty根目录

执行 nginx.exe -t测试配置文件是否正确

 

tips:如有错误请做相应的修改

测试通过后直接双击nginx.exe启动nginx

 

访问:

http://localhost:8090/

 

至此nginx ssl成功。

四、web服务js端,java服务端,java Client端操作:

                     Maven+Springboot+jsp实现

1.pom配置:

 

2. application.yml配置(使用web工程,使用JSP作为视图端)

 

3.JAVA服务端普通JMS发送

 

4.JAVA mqtt client连接

 

Callback

 

5.springboot web jsp服务器

5.1 主入口

 

5.2 JSP相关配置

 

5.3 Jsp页面JS连接mqtt

 

 

以上为部分伪代码,案列DEMO工程目录结构:

 

源码:

 

五、微信小程序端mqtt

                     参考工程:

                    

六、效果演示:

           6.1启动服务端TopicProducerTest:

 

连接的是tcp 61616端口  activemq openwire协议,往主题PTP.test发送消息

  6.2 启动java client端MqttTestClient

 

                连接的是:tcp://localhost:1883  activemq matt协议,订阅PTP/test主题

   6.3 启动web服务 MqttServiceApp

 

访问jsp: http://localhost:8089/jsp/mqtt_client.jsp

 

JS端连接的是 ws协议端口即:

ws://localhost:61614/mqtt。使用mqtt31.js仅需指定端口Ip 即可

6.4 连接微信小程序端:

 

tips:此处连接的是nginx443端口,微信默认使用wss协议连接,通过nginx跳转ws到 activemq上,微信小程序目前还暂不支持mqtt协议,开发的仅是websocket协议

连接成功后:

 

订阅主题:PTP/test

 

 

6.5 服务端发送消息

 

 Java client 接受消息:

 

网页端:

 

小程序端:

 

Tips案例的message需要手动点击才会看到消息,暂为做自动显示

6.6 activemq连接情况

 

7、参考连接:

           http://www.wxappclub.com/topic/842

           https://github.com/sqwsummerwind/mqtt-wechat-applet-client

           https://blog.csdn.net/oufua/article/details/54375609

           https://zhuanlan.zhihu.com/p/24823848

 8、相关代码资源下载:

https://github.com/Xlinlin/SpringCloud-Demo/tree/master/SpringCloud-Demo-Doc/%E5%85%B6%E4%BB%96%E4%B8%AA%E4%BA%BA%E6%80%BB%E7%BB%93

有道云分享地址,图文结合完整版:

http://note.youdao.com/noteshare?id=6d66481f9261b0b952726ed7be84f172

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mqtt协议实现即时通讯-activemq nginx.支持JS,JAVA,微信小程序 的相关文章

  • ActiveMQ NMS C# 对象消息使用什么序列化方法?

    我计划使用 Apache NMS 进行 ActiveMQ 消息传递 并且想知道我发送的对象将使用什么序列化方法 XML 二进制 什么控制序列化以及如何自定义它 有人有使用 C 对象执行此操作的经验吗 您知道有哪些陷阱吗 IObjectMes
  • SpringBoot应用程序发布并读取ActiveMQ主题

    我有两个应该从一个主题中读取的接收器 但只有一个随机接收者收到消息 就像它实际上是从队列而不是主题中读取的一样 我读了this https stackoverflow com questions 40144561 how to listen
  • 无法使用 Node.js 连接到 Apache ActiveMQ

    背景 尝试使用 AMQP 1 0 协议通过以下方式连接到我的 Apache ActiveMQ 代理amqp10 https www npmjs com package amqp10 我使用以下代码 改编自自述文件中的原始示例 const A
  • 微信怎么申请小程序商城?一步步教你完成

    随着移动互联网的发展 越来越多的企业和个人开始关注微信小程序 微信小程序是一种不需要下载安装即可使用的应用 它实现了应用 触手可及 的梦想 用户扫一扫或者搜一下就能打开应用 其中 小程序商城因其便捷性和实用性 受到了众多商家的青睐 那么 如
  • 微信小程序的自动化测试框架

    微信发布了小程序的自动化测试框架Minium 提供了多种运行验证方式 其特点 支持一套脚本 iOS Android 模拟器 三端运行 提供丰富的页面跳转方式 看不到也能去得到 可以获取和设置小程序页面数据 让测试不止点点点 可以直接触发小程
  • 使用 ActiveMQ/Stomp 在 PHP 和 Java 之间进行通信

    背景 我有两个服务需要通过消息队列相互通信 一种是用 PHP 编写的遗留服务 另一种是用 Java 编写的 迟早 PHP 服务将被 Java 重写 它们当前相互通信的方式是写入共享数据库 由其他服务轮询 这就是我试图摆脱并用消息队列替换的内
  • ActiveMQ:一条待处理消息,但队列为空

    我在使用 ActiveMQ 时遇到了一个奇怪的问题 我有一个队列 似乎有待处理的消息 但是当我打开队列时 没有消息 这里有什么问题吗 真的有消息待处理吗 我怎样才能取回消息或至少看到内容 Screenshot of the pending
  • ActiveMQ从java中删除队列

    如何从java程序中删除activemq中的队列 有类似 session delelteQueue 的东西吗 谢谢M 简单的解决方案 不使用 JMX 将连接转换为 ActiveMQConnection 并使用其 destroyDestina
  • 如何使用 Spring WebSocket 向 STOMP 客户端发送错误消息?

    我正在使用 Spring 的 STOMP over WebSocket 实现和功能齐全的 ActiveMQ 代理 当用户SUBSCRIBE对于一个主题 有一些权限逻辑 必须经过一些权限逻辑 才能成功订阅 我正在使用 ChannelInter
  • 网络故障后重新连接ActiveMQ服务器

    我们正在使用 ActiveMQ 5 8 0 通过 TCP 将 Java 应用程序连接到另一个系统 请求 回复 与对临时队列的回复同步 与我们的客户端及其相应部分配合良好 但我们不确定如何处理 异常 情况 例如短暂的网络故障 我们正在测试应用
  • java.io.EOFException 与 paho

    我想对蚊子进行压力测试 所以我创建了一些代码 如下所示 for int i 0 i lt 800 i final int j i Thread t new Thread new Runnable Override public void r
  • AWS-IoT 核心代理的最大消息负载大小是多少?

    在文档中AWS 服务限制 https docs aws amazon com general latest gr aws service limits htmlIoT Core 服务的有效负载大小限制尚不清楚 既然我们可以将本地 mosqu
  • 我可以向通过 MQTT WebSocket 连接的一组 Azure IoT 中心设备发送消息吗?

    Goal 将消息发送到一组通过 MQTT WebSocket 连接的 Azure IoT 中心设备 初步想法 让一组 IoT 中心设备 组 X 订阅主题 X 的消息 Problem On the 使用 MQTT 协议与 IoT 中心通信 h
  • 如何在 AUTO_ACKNOWLEDGE JMS 会话场景中模拟消息重新传递?

    在下面的测试中 我尝试模拟以下场景 消息队列启动 启动设计为在消息处理期间失败的消费者 产生一条消息 消费者开始处理消息 在处理过程中抛出异常来模拟消息处理失败 失败的消费者被停止 另一个消费者启动的目的是接收重新传递的消息 但我的测试失败
  • 如何M2MQTT自动重连

    我正在尝试使用此协议 并且已经有 2 个客户端 一个用于发布 另一个用于订阅 和一个正在工作的经纪人 我的问题是我想在订阅客户端中实现重新连接功能 因为 wifi 信号不稳定并且不想每次都手动重新启动客户端 我该如何实现这一点 您可以使用
  • 在 ActiveMQ 中查看消息时,代理无法使用可序列化类:java.lang.ClassNotFoundException

    我想查看已在 ActiveMQ 队列中排队的消息内容 我打开网络控制台 http localhost 8161 admin queues jsp http localhost 8161 admin queues jsp 并单击队列消息的消息
  • Apache Camel/ActiveMQ 优先级路由

    我有两个具有相同消费者的 AMQ 队列 第一个队列 Q1 处理 97 的消息 另一个队列 Q2 仅处理 3 问题是 Q2 中的消息需要在排队后立即处理 所以我的问题是 当第二季度有消息可用时 我需要以某种方式暂停第一条路线以吸引其消费者 a
  • 从 Lambda 向 AWS IoT Core 发布 MQTT 消息

    我是 AWS 世界的新手 目前正在开发一项 Alexa 技能 该技能只需向 AWS IoT Core 代理发布一条 mqtt 消息 与之前创建的 事物 和主题进行交互 目前我正在使用 boto3 但我不确定这是正确的路径 这是代码 但在部署
  • 请求/响应的 MQTT 主题名称

    我正在设计一个包含许多设备的系统 使用 MQTT 连接到中央代理 有些主设备可以向某些从设备发送请求 来自一台主机的请求通常会发送给一台从机 请求的主题可以是 mysystem slaveId req 因此从站可以订阅该主题 并且主站可以发
  • 用于检查 Apache Camel XML 中字符串的 JSONPath 表达式

    假设我有一个简单的 json 文件 如下所示 log host blah severity INFO system 1 我正在使用 Apache Camel 它是 Spring XML 来处理和路由 json 文件 我的路由代码看起来像这样

随机推荐

  • 什么是AIGC(AI Generated Content, 人工智能生成内容)?

    AI生成内容 AIGC 人工智能生成内容 是一种新型的内容创作方式 它继承了专业生产内容 PGC Professional generated Content 和用户生成内容 UGC User generated Content 的优点 并
  • Mybatis-Plus+SpringBoot结合运用

    目录 前言 一 创建Maven项目导入相关的依赖 二 在resources添加日志和连接数据库 1 日志文件 log4j properties 2 连接数据库 application properties 三 编写pojo 注解编写get
  • elasticsearch 扩展词、停止词热更新方案 - 附代码

    最近要实现的一些功能需要让ES的扩展词 停用词能够热更新 达到让搜索更精确的目的 再此记录一下操作流程 ES版本 7 11 2 IK分词器版本 7 11 2 方式一 通过加载远程的方式热加载扩展词 停用词 分词器下载路劲 https git
  • Docker 目录挂载详述

    转载 https www cnblogs com mybxy p 10393935 html 侵删 Docker 目录挂载详述 Docker容器启动的时候 如果要挂载宿主机的一个目录 可以用 v参数指定 譬如我要启动一个centos容器 宿
  • Alibaba代码检查工具插件

    真香定律 Alibaba代码检查工具插件 插件安装 使用方法 作为idea的小插件 阿里的这一款代码扫描工具能给与我们很大程度上的代码检测 书写规范的提示 用过的都说香 插件安装 点击File gt Settings gt Plugins
  • INL/DNL Measurements for High-

    Abstract Although integral and differential nonlinearity may not be the most important parameters for high speed high dy
  • Struts2部署异常

    MyEclipse8 5 部署struts2 3 1 tomcat6 x jdk6 java lang UnsupportedClassVersionError Bad version number in class file Java 编
  • python操作mysql数据库

    import pymysql conn pymysql connect localhost root 933032shixinfa user cursor conn cursor 游标对象用于执行查询和获取结果 cursor execute
  • 攻击日志分析 中职网络安全

    登录FTP下载数据包文件hacker1 pacapng 分析出黑客扫描得到的靶机开放的端口 将靶机开放的端口作为FLAG 形式 端口名1 端口名2 端口名3 端口名n 从低到高提交 ip src 192 168 1 10 and tcp f
  • java实现生成二维码并压缩内容

    前景 由于公司需求一个工具 这个工具需要将csv文件中的数据存入二维码中 使用手机进行识别 本文采用opencsv和google的zxing来将csv中的数据存储到二维码中 但是最终结果发现一个问题 明文存储在二维码中 将不能够存很多数据
  • uniapp开发微信小程序,从构建到上线

    前言 本文主要介绍 uniapp 的基础使用 以及使用 uniapp 在企业开发的过程中的一个详细流程 比较适合第一次使用uniapp 开发微信小程序的伙伴 或者没有过实战经验的小伙伴参考 使用 Hbuildx 配合 Uniapp 框架结合
  • Apache Tomcat下载、安装、配置图文教程

    Apache Tomcat下载 安装 配置图文教程自我心得 1 Tomcat下载 1 Tomcat官网 Tomcat官方网址 可以在此处下载Tomcat 2 点击左侧Download下的对应版本 注意有zip和exe两种格式的 zip是免安
  • snort部署

    snort部署 环境 centocs7 安装包链接下载 链接 https pan baidu com s 1h1LpGZstIk4wpBE06l03VA 提取码 2pk4 环境初始化 修改主机名 创建自启文件 root bogon host
  • windows cmd使用ssh连接Linux以及文件上传

    CMD连接服务器命令 47 102 144 221 为服务器 IP ssh root 47 102 144 221 文件上传 scp 后面参数为本地文件地址 47 102 144 221 为服务器 IP 冒号后面指 将文件上传到服务器哪个目
  • 数据结构实验4:单调队列(滑动窗口)和单调栈的应用

    题目 1 2
  • 单件(Singleton):对象创建型模式

    文章目录 1 单件类的基本概念和实现 2 单件类在多线程中可能导致的问题 2 1 粗暴加锁 不推荐 2 2 双重加锁 存在潜在问题 2 3 一个好的解决方法 3 饿汉式与懒汉式 3 1 饿汉式 3 2 懒汉式 4 单件类对象内存释放问题 4
  • Linux系统下安装TensorFlow的GPU版本

    前言 安装TensorFlow的GPU版本真的不是一件容易的事 好难 网上的各种安装教程倒是不少 但是基本没有一个能完全照着那种方法就能安装成功的 甚至有些连最基本的一些必需的步骤都没写到 那样子的话能安装到位才是奇迹 在经历各种踩坑后 我
  • union all和order by一起使用出问题

    使用mysql用union或union all并子集中用order by排序顺序会混乱 select id from a order by start time asc union all select id from b order by
  • javaWeb基于SSM框架学生信息管理系统项目完整源码附带部署教程

    学生信息管理系统 项目概述 一个基于SSM的学生管理系统 代码注释详细 逻辑结构清晰 对于初学 SSM 的同学非常具有参考 及学习价值哟 数据库中默认的管理员身份信息 账户名 admin 密码 admin ps 只有管理员这一条数据哦 学生
  • mqtt协议实现即时通讯-activemq nginx.支持JS,JAVA,微信小程序

    MQTT协议通信 简述 使用MQTT协议实现后台推送 及时通信等功能 本案例实现了web js端 微信小程序端 Java client端 Java server端 软件版本 Nginx openresty 1 13 6 1 win32 ht