• 如何在 Windows Server 2022 阿里云服务器上搭建自己的 MQTT 服务器之一Apache-Apollo服务器。


    一、简介
        最近,在做一个项目的时候,需要在线管理网络继电器,以前也做过硬件的项目,但是这样的项目不多。现在我想实现一个在线可以接受网络继电器发送的信号,也可以向网络继电器发送命令,控制其的运行。这个功能的实现需要物联网的支持,我在咨询了网络继电器卖家,想要在线实现网络硬件的管理有三种解决方案。
        第一种:由于我买的是阿里云的服务器,可以在买阿里云的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

                

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

                

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

                  

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

                              
                          右键”计算机” => ”属性” => ”高级系统设置” => ”高级” => “环境变量” => “系统变量”。

                2】、新建:

                     变量名:JAVA_HOME

                     变量值:D:\program files\Java\jdk-1.8【具体要根据你自己的安装路径,我的是安装在D盘的】
                     


                3】、新建:

                     变量名:CLASSPATH

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

                     


                4】、添加:找到PATH变量,选择编辑。
                     把  %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 添加到”变量值”的结尾处。
                     

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

                                         

        2、下载、配置 Apollo 服务器。
            1)、先上 Apollo 服务器的下载地址。
               
    地址1:https://pan.baidu.com/s/1-tU9P5srKiM3P1Vy10eOQg 百度网盘下载地址(目前有效,不知是否一直有效
                  提取码: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/

                

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

                

                
                成功创建文件夹。
                

            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 命令获取的地址了,总是不通

                
    复制代码
     1 xml version="1.0" encoding="UTF-8" standalone="yes"?>
     2 
    16 
    17 
    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   
    34   <access_rule allow="admins" action="*"/>
    35   <access_rule allow="*" action="connect" kind="connector"/>
    36   
    37 
    38   <virtual_host id="mqttServer">
    39     
    43     <host_name>mqttServerhost_name>
    44     <host_name>localhosthost_name>
    45     <host_name>127.0.0.1host_name>
    46 
    47     
    48     
    49 
    50     
    51     
    52     <access_rule allow="users" action="connect create destroy send receive consume"/>
    53     
    54 
    55     
    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>
    复制代码

            4)、修改 users.properties 文件,我保持的默认。
                 apache-apollo-1.7.1\bin\mqttServer\etc\users.properties 这个文件可以配置登录账号密码,示例有一个admin=password, admin是账号,password是密码,客户端连接服务器和web网页登录所用的账号密码都是这个。
                

                源码如下:

    复制代码
     1 ## ---------------------------------------------------------------------------
     2 ## Licensed to the Apache Software Foundation (ASF) under one or more
     3 ## contributor license agreements.  See the NOTICE file distributed with
     4 ## this work for additional information regarding copyright ownership.
     5 ## The ASF licenses this file to You under the Apache License, Version 2.0
     6 ## (the "License"); you may not use this file except in compliance with
     7 ## the License.  You may obtain a copy of the License at
     8 ##
     9 ## http://www.apache.org/licenses/LICENSE-2.0
    10 ##
    11 ## Unless required by applicable law or agreed to in writing, software
    12 ## distributed under the License is distributed on an "AS IS" BASIS,
    13 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14 ## See the License for the specific language governing permissions and
    15 ## limitations under the License.
    16 ## ---------------------------------------------------------------------------
    17 
    18 #
    19 # The list of users that can login.  This file supports both plain text or
    20 # encrypted passwords.  Here is an example what an encrypted password
    21 # would look like:
    22 #
    23 # admin=ENC(Cf3Jf3tM+UrSOoaKU50od5CuBa8rxjoL)
    24 #
    25 
    26 admin=password
    复制代码
            5)、配置 groups.properties 文件。
                apache-apollo-1.7.1\bin\mqttServer\etc\groups.properties 这个文件可以配置多个账户,如示例中的,示例是admins=admin 如果想添加多个账户可以 admins=admin|test ,其中test就是新增账户。
                

                源码如下:

    复制代码
     1 ## ---------------------------------------------------------------------------
     2 ## Licensed to the Apache Software Foundation (ASF) under one or more
     3 ## contributor license agreements.  See the NOTICE file distributed with
     4 ## this work for additional information regarding copyright ownership.
     5 ## The ASF licenses this file to You under the Apache License, Version 2.0
     6 ## (the "License"); you may not use this file except in compliance with
     7 ## the License.  You may obtain a copy of the License at
     8 ##
     9 ## http://www.apache.org/licenses/LICENSE-2.0
    10 ##
    11 ## Unless required by applicable law or agreed to in writing, software
    12 ## distributed under the License is distributed on an "AS IS" BASIS,
    13 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14 ## See the License for the specific language governing permissions and
    15 ## limitations under the License.
    16 ## ---------------------------------------------------------------------------
    17 
    18 #
    19 # Allows you to place multiple users in a group.
    20 # Example:
    21 #
    22 # power_users=admin|chirino
    23 #
    24 admins=admin
    复制代码

            6)、运行 apollo-broker.cmd 命令。
                在 apache-apollo-1.7.1\bin\mqttServer\bin 路径下输入CMD打开命令行,输入apollo-broker.cmd run运行,出现下图就说明配置成功
                

                

            7)、客户端(外网客户端和服务器本地,访问方式不同)测试运行。   
                 如果在服务器本地访问,可以直接访问:http://localhost:61680,或者 http://127.0.0.1:61680,都可以访问,会出现如下界面,说明配置成功。
                当然,如果是在外网访问的话,就要使用服务器公网IP+端口号,否则也是不通的。比如:http://1**.9*.1**.1**:61680/
                 
                  其中connectors选项下的TCP就代表MQTT的访问
                 如果我们有MQTT客户端连接的话,这里也是有显示的。
                
                  这就是我们当前的链接

                  


            8)、安装 Windows 服务。
                这个命令的目录是:\apache-apollo-1.7.1\bin\mqttServer\bin
                
                1】、执行 apollo-broker-service install 命令和 apollo-broker-service start 命令。
                     

                2】、通过services.msc 命令查看服务。
                      

        3、MQTT.fx 安装和使用
            MQTT服务器安装好了,现在我们开始使用使用MQTT工具来访问了。我使用的是MQTT.fx,使用的版本是。1.7.1,也把过程记录下来。这是启动的图标。MQTT.fx 是目前主流的mqtt客户端,可以快速验证是否可以与IoT Hub 服务交流发布或订阅消息。设备将当前所处的状态作为MQTT主题发送给IoT Hub,每个MQTT主题topic具有不同等级的名称,如“建筑/楼层/温度。” MQTT代理服务器将接收到的主题topic发送给给所有订阅的客户端。目前最新版下载地址(支持windows,linux,mac)
            
            1)、下载地址:https://pan.baidu.com/s/1jwA7GUcT8h-rk_kt4CZq1A  ,现在只有百度网盘有了1.7.1版本的,提取码:1234。
              我在贴一个地址:https://softblade.de/en/download-2/ 这个应该是可以的,安装很简单,就不多说了,我就说说如何使用把。

                【1】、首先配置 MQTT 代理
                    

                               

                【2】、打开配置窗口如下:
                    

                【3】、回到主界面,点击connect连接到MQTT 代理服务器上,就可以进行订阅和发布消息测试了。

                    

                【4】、Publish 发布测试。(主题:这是测试,内容:this is my test 2023.7.13)
                    

                【5】Subscribe即订阅(订阅该主题之后,每次发布消息均会收到通知)
                    

                【6】、链接成功之后,在apache-apollo管理平台可以看到有一个链接存在了
                   

    三、总结    
        好了,今天就写道这里了,这个测试也挺麻烦的,不熟悉的也踩草不少坑,谁都有第一次,慢慢来就好了。最近接触了很多新的东西,也学到了不少东西,每天有进步,还是很开心的,不忘初心,继续努力吧。
  • 相关阅读:
    AI领域再出“王炸“----Claude3是否会成为下一个“神“
    Kotlin(九)类、属性、构造函数
    Ubuntu查看端口状态
    Kubernetes 笔记 / 目录
    ⭐北邮复试刷题429. N 叉树的层序遍历(按层入队出队BFS)(力扣每日一题)
    Redis_24_Redission的使用
    二级Java程序题--03综合应用:源代码(all)
    算法总结--搜索
    Biotin-Sulfo-DBCO
    前端知识点、技巧、webpack、性能优化(持续更新~)
  • 原文地址:https://www.cnblogs.com/PatrickLiu/p/17547286.html