1

我已经安装了 Apache Apollo 并成功运行它。我可以通过http://127.0.0.1:61680/访问其 Web 仪表板。

我想通过 STOMP 连接到这个。我正在使用库 [StompKit][1] 来执行此操作。

private let host: String = "127.0.0.1"
private let port: UInt = 61680

private var client: STOMPClient!

override func viewDidLoad() {
    super.viewDidLoad()

    client = STOMPClient(host: host, port: port)
    connect()
}

连接失败并出现错误Connection denied

这是apollo.xml文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements. See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version
  2.0 (the "License"); you may not use this file except in compliance
  with the License. You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0 Unless required by
  applicable law or agreed to in writing, software distributed under
  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
  OR CONDITIONS OF ANY KIND, either express or implied. See the
  License for the specific language governing permissions and
  limitations under the License.
-->

<!--
  For more information on how configure this file please
  reference:

  http://activemq.apache.org/apollo/versions/1.7.1/website/documentation/user-manual.html
  -->
<broker xmlns="http://activemq.apache.org/schema/activemq/apollo">

  <notes>
    The default configuration with tls/ssl enabled.
  </notes>

  <log_category console="console" security="security" connection="connection" audit="audit"/>


  <authentication domain="apollo"/>
  <!-- Give admins full access -->
  <access_rule allow="admins" action="*"/>
  <access_rule allow="*" action="connect" kind="connector"/>


  <virtual_host id="mybroker">
    <!--
      You should add all the host names that this virtual host is known as
      to properly support the STOMP 1.1 virtual host feature.
      -->
    <host_name>mybroker</host_name>
    <host_name>localhost</host_name>
    <host_name>127.0.0.1</host_name>

    <!-- Uncomment to disable security for the virtual host -->
    <!-- <authentication enabled="false"/> -->

    <!-- Uncomment to disable security for the virtual host -->
    <!-- <authentication enabled="false"/> -->
    <access_rule allow="users" action="connect create destroy send receive consume"/>


    <!-- You can delete this element if you want to disable persistence for this virtual host -->
    <leveldb_store directory="${apollo.base}/data"/>


  </virtual_host>

  <web_admin bind="http://127.0.0.1:61680"/>
  <web_admin bind="https://127.0.0.1:61681"/>

  <connector id="tcp" bind="tcp://0.0.0.0:61613" connection_limit="2000"/>
  <connector id="tls" bind="tls://0.0.0.0:61614" connection_limit="2000"/>
  <connector id="ws"  bind="ws://0.0.0.0:61623"  connection_limit="2000"/>
  <connector id="wss" bind="wss://0.0.0.0:61624" connection_limit="2000"/>

  <key_storage file="${apollo.base}/etc/keystore" password="password" key_password="password"/>

</broker>

尝试 1

我能找到的唯一与此相关的答案是 [this][2] (尽管它是针对 MQTT 的)。authentication无论如何,我通过添加该行来修改 apollo.xml 文件。

<virtual_host id="mybroker">
    <authentication enabled="false"/>
...

但这并没有改变。

尝试2:

Web 仪表板有一个用户名/密码登录。所以我尝试了一种不同的 StompKit 方法。

client.connectWithLogin("admin", passcode: "password") { connectedFrame, error in
    if let error = error {
        print("Error during connecting: \(error.localizedDescription)")
    } else {
        print("Connected!")
    }
}

错误仍然存​​在。

我在这里做错了什么?

4

1 回答 1

0

默认情况下,STOMP 客户端可以通过端口61613连接到 Apollo 。端口 61680 用于 Web 管理界面。

您的配置包含

<connector id="tcp" bind="tcp://0.0.0.0:61613" connection_limit="2000"/>

所以我假设

private let port: UInt = 61613

在您的代码中应该可以解决问题


注意:可以使用 netstat 或 TCPView 来验证 61613 端口是否打开

于 2016-07-10T08:20:18.023 回答