ActiveMQ 无法识别 Stomp:传输方案无法识别:[stomp+ssl]

Posted

技术标签:

【中文标题】ActiveMQ 无法识别 Stomp:传输方案无法识别:[stomp+ssl]【英文标题】:ActiveMQ doesn't recognize Stomp: Transport scheme NOT recognized: [stomp+ssl] 【发布时间】:2017-02-11 20:53:54 【问题描述】:

我正在尝试在 puppetmaster(开源 puppet)上设置 mcollective/activemq。我遇到了 ActiveMQ 无法识别 Stomp 协议的问题。这是我的/etc/activemq/instances-enabled/activemq/activemq.xml 文件中应该启用 stomp+ssl 的相关 sn-p:

<transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
            <transportConnector name="stomp+ssl" uri="stomp+ssl://0.0.0.0:61614?needClientAuth=true&amp;transport.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2"/>
</transportConnectors>

当我通过service activemq start 启动 ActiveMQ 时,我注意到守护程序最终没有运行(我不认为它是一个进程)。然后我尝试运行service activemq console activemq,看起来问题是它找不到 stomp Transport 方案。这是我在输出中看到的第一个错误(并且该错误在整个输出中持续存在):

错误 |无法启动 Apache ActiveMQ([本地主机, ID:my-servers-hostname.example.com-40447-1475514312306-0:1],java.io.IOException:传输 连接器无法注册 JMX:java.io.IOException:传输 无法识别方案:[stomp+ssl])

ActiveMQ 可以很好地识别 openwire。仅使用 openwire+ssl 时,不使用 stomp+ssl,ActiveMQ 守护进程可以正常启动,没有错误。但是,当我尝试运行mco find 时,我收到一个错误,因为似乎 mco 仍在尝试使用 stomp+ssl(并且 ActiveMQ 仅启用了 openwire+ssl):

错误 2016/10/03 17:26:59: activemq.rb:149:in `on_ssl_connectfail' SSL session creation with stomp+ssl://mcollective@localhost:61614 failed: Connection refused - connect(2) for “本地主机”端口 61614

也许我需要调整我的 mco 配置以使用 openwire 而不是 stomp?我不确定该配置将在何处或哪个文件中。不确定为什么它无法识别 stomp,但我想知道我的选择是什么。是否可以仅使用 openwire+ssl 来使用 MCollective/ActiveMQ,或者如果我想使用 mco,是否需要使用 stomp?我认为这不是端口问题,因为我相信服务器上的相关端口是开放的。

以下是我机器上安装的相关软件包/版本:

OS: Ubuntu 16.04 (xenial)
puppet: 4.7.0
ActiveMQ: 5.13.2
ruby-stomp: 1.3.5-1
MCollective (mco) version: 2.9.0

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

我的项目中的嵌入式 ActiveMQ 服务器遇到了同样的问题。原来我需要将以下依赖项添加到我的 pom 中。

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-stomp</artifactId>
        <version>5.15.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-kahadb-store</artifactId>
        <version>5.15.0</version>
    </dependency>

在您的情况下,我认为您需要获取这 2 个 jar 并将它们添加到您的 ActiveMQ 安装中。

【讨论】:

【参考方案2】:

在 ubuntu 16+ 库提供的 activemq 包中不包括 stomp 传输。我不知道为什么。 Yoy可以手动下载并放在/usr/share/activemq/lib

cd /usr/share/activemq/lib
# check your actviemq version before (apt-cache policy activemq) and use the relevant version of library.
wget https://repository.apache.org/content/repositories/releases/org/apache/activemq/activemq-stomp/5.13.5/activemq-stomp-5.13.5.jar
service activemq restart

【讨论】:

请编辑您的帖子以包含有关该代码为何会回答问题的详细信息 @CalvT븃 添加了更多信息 这解决了 Ubuntu 16.04 上 ActiveMQ 的问题,即通过 systemctl start activemq.service 调用 ActiveMQ 时无法启动;例如,当尝试使用 ActiveMQ 运行经典 (Puppet 3.x) MCollective 代理时(由 voxpupuli/mcollective 管理,而不是使用 NATS 作为中间件的新 Choria MCollective deployment。运行 /etc/init.d/activemq console mcollective 有助于识别缺少 Stomp 的问题库,没有记录在其他任何地方。

以上是关于ActiveMQ 无法识别 Stomp:传输方案无法识别:[stomp+ssl]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 STOMP 向 activemq 发送消息

与 Mule/ActiveMQ 和 C++ Stomp 的客户端通信

ActiveMQ、STOMP、Java 示例

ActiveMQ 与 WebSocket 的结合推送方案+Spring Websocket Stomp

传输方案未识别:[amqp]

如何将事务与 Stomp 和 ActiveMQ(和 Perl)一起使用?