一、简介
    最近,在做一个项目的时候,需要在线管理网络继电器,以前也做过硬件的项目,但是这样的项目不多。现在我想实现一个在线可以接受网络继电器发送的信号,也可以向网络继电器发送命令,控制其的运行。这个功能的实现需要物联网的支持,我在咨询了网络继电器卖家,想要在线实现网络硬件的管理有三种解决方案。
    第一种:由于我买的是阿里云的服务器,可以在买阿里云的IOT组件,而且提供了全部功能,提供优化的接口,硬件、网络的管理和维护都不用关心,但是费用不菲。
    第二种:如果公司内部有特牛的 TCP/IP 软件工程师的话,可以自己写一套出来,但是这个开发过程、调试过程、维护过程等,周期比较长,这样的人也不好找,性价比不高。
    第三种:可以自己在云服务器上搭建MQTT服务器,通过其组件实现在线管理,这种方案总体来说,性价比最高。
    我选择的是第三种解决方案,我已经在云服务器上搭建了自己的MQTT服务器,硬件之间也可以实现管理了,我今天就把过程记录下来,以防以后使用的时候到处乱找,而且网上的有的也不是很全和很详细,如果大家有需要,也可以直接使用。我写的很详细,小白照着做都没有问题,高手就略过吧。

    我的搭建环境如下:
        云平台:阿里云平台
        操作系统:Windows Server 2022 Datacenter
        机器内存:8.00 GB (7.73 GB 可用)
        系统类型:64 位操作系统, 基于 x64 的处理器
        MQTT服务器:Apache-Apollo
        MQTT客户端:MQTT.fx

    IOT初次接触,当然了,很多相关的工具也是初始使用,使用不好,大家不要见笑。

二、配置详情
    想要安装 Apache-Apollo,必须安装他的运行时,因为它是用Java 写的,当然需要安装 Java 的运行环境,下载 JDK,直接安装就可以,很简单,没什么可说的。安装完成,也要配置环境变量,否则我们不能直接在 cmd 命令行终端种使用其命令。话不多说,直接开始。

    1、由于 Apache-Apollo 的运行需要使用 Java 的运行环境,第一个必须先下载 JDK。
        1)、下载 JDK 安装程序,我贴了两个地址,都可以直接下载。
            
地址1:https://www.java.com/zh-CN/   ,
            地址2:https://www.oracle.com/cn/java/technologies/downloads/#java8-windows

            如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

            点击两次才到真正下载页面。

            如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

              下载到本地的文件,我下载两个,一个是 JDK,一个是 JRE,大家只下载一个就好。

              如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

        2)、安装JDK步骤没有什么可说的,直接下一步就可以,根据自己的需求更改就可以。
            1】、第一步要先安装好JDK的运行环境, 点击jdk-8u271-windows-x64安装包,点击运行后弹出下列界面,点击下一步
                
            2】、 我把安装包放在了自定义目录下,好多国外软件安装路径出现中文或空格都会出现错误,所以我为了避免这种情况 安装国外软件的时候路径都不包含中文和空格,选择默认路径也可以。
                
        3)、配置Java环境变量
            1】、配置系统的环境变量
                 如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

                       如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP   
                      右键”计算机” => ”属性” => ”高级系统设置” => ”高级” => “环境变量” => “系统变量”。

            2】、新建:

                 变量名:JAVA_HOME

                 变量值:D:\program files\Java\jdk-1.8【具体要根据你自己的安装路径,我的是安装在D盘的】
                 如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP


            3】、新建:

                 变量名:CLASSPATH

                 变量值:%JAVA_HOME%/lib/dt.jar;%JAVA_HOME/%/lib/tools.jar

                 如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP


            4】、添加:找到PATH变量,选择编辑。
                 把  %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 添加到”变量值”的结尾处。
                 如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

           5】、确保电脑安装了Java 运行时环境 JRE 或者 JDK ( version >=1.7 )
                 在命令窗口中,输入java命令:java -version,回车,如果出现版本信息,说明安装成功。

                 如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP                    

    2、下载、配置 Apollo 服务器。
        1)、先上 Apollo 服务器的下载地址。
           
地址1: 百度网盘下载地址(目前有效,不知是否一直有效
              提取码:e5l0
              (包含apache-apollo-1.7.1-windows-distro、jdk-8u271-windows-i586、jdk-8u271-windows-x64)

            地址2:http://archive.apache.org/dist/activemq/activemq-apollo/1.7.1/

            如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

        2)、 在CMD下输入 apollo.cmd create mqttServer,显示创建完成如下
             下载Apollo服务器并解压,在apache-apollo-1.7.1\bin的路径栏输入cmd运行,这种方式便于测试,如果想正常使用,安装为 Windows 服务。

            如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

            如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP
            成功创建文件夹。
            如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP

        3)、配置 apollo.xml 文件。
            
在 apache-apollo-1.7.1\bin\mqttServer\etc 目录下,其中 apollo.xml 是配置文件,再次强调一下,如果想要在外网访问,必须把以前的127.0.0.1 改成 0.0.0.0 ,如果是云服务器,通过网站访问就是:http://云服务器公网IP:61680/console/index.html,如果是通过MQTT客户端访问:云服务器公网IP:61613,我第一次就配置成了通过 IPconfig 命令获取的地址了,总是不通

            如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器。-LMLPHP
 1 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 2 <!--
 3   Licensed to the Apache Software Foundation (ASF) under one or more
 4   contributor license agreements. See the NOTICE file distributed with
 5   this work for additional information regarding copyright ownership.
 6   The ASF licenses this file to You under the Apache License, Version
 7   2.0 (the "License"); you may not use this file except in compliance
 8   with the License. You may obtain a copy of the License at
 9   http://www.apache.org/licenses/LICENSE-2.0 Unless required by
10   applicable law or agreed to in writing, software distributed under
11   the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
12   OR CONDITIONS OF ANY KIND, either express or implied. See the
13   License for the specific language governing permissions and
14   limitations under the License.
15 -->
16 
17 <!--
18   For more information on how configure this file please
19   reference:
20 
21   http://activemq.apache.org/apollo/versions/1.7.1/website/documentation/user-manual.html
22   -->
23 <broker xmlns="http://activemq.apache.org/schema/activemq/apollo">
24 
25   <notes>
26     The default configuration with tls/ssl enabled.
27   </notes>
28 
29   <log_category console="console" security="security" connection="connection" audit="audit"/>
30 
31   
32   <authentication domain="apollo"/>
33   <!-- Give admins full access -->
34   <access_rule allow="admins" action="*"/>
35   <access_rule allow="*" action="connect" kind="connector"/>
36   
37 
38   <virtual_host id="mqttServer">
39     <!--
40       You should add all the host names that this virtual host is known as
41       to properly support the STOMP 1.1 virtual host feature.
42       -->
43     <host_name>mqttServer</host_name>
44     <host_name>localhost</host_name>
45     <host_name>127.0.0.1</host_name>
46 
47     <!-- Uncomment to disable security for the virtual host -->
48     <!-- <authentication enabled="false"/> -->
49 
50     <!-- Uncomment to disable security for the virtual host -->
51     <!-- <authentication enabled="false"/> -->
52     <access_rule allow="users" action="connect create destroy send receive consume"/>
53     
54 
55     <!-- You can delete this element if you want to disable persistence for this virtual host -->
56     <leveldb_store directory="${apollo.base}/data"/>
57     
58 
59   </virtual_host>
60   //Web网站系统访问的IP地址,127.0.0.1,这样定义只能内网访问,如果想外网访问,改成:0.0.0.0,格式:http://1**.9*.11*.1**:61680/console/index.html#
61   <web_admin bind="http://0.0.0.0:61680"/>  
62   <web_admin bind="https://0.0.0.0:61681"/>
63  //这是MQTT服务器的地址,在使用MQTT客户端访问MQTT服务器的格式:云服务器公网地址(不是执行ipconfig获取的地址):端口号,格式:1**.9*.11*.1**:61613
64   <connector id="tcp" bind="tcp://0.0.0.0:61613" connection_limit="2000"/> 
65   <connector id="tls" bind="tls://0.0.0.0:61614" connection_limit="2000"/>
66   <connector id="ws"  bind="ws://0.0.0.0:61623"  connection_limit="2000"/>
67   <connector id="wss" bind="wss://0.0.0.0:61624" connection_limit="2000"/>
68 
69   <key_storage file="${apollo.base}/etc/keystore" password="password" key_password="password"/>
70 
71 </broker>
07-13 20:51