我使用HTTP而不是TCP连接到Artemis有问题。
在我的ActiveMQ上有" classic "使用HTTP连接到代理的配置,如下所示:
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?transport.maximumConnections=1000&transport.wireFormat.maxFrameSize=104857600&transport.keepAlive=true&transport.trace=true&transport.useKeepAlive=true&transport.connectionTimeout=30000" />
<transportConnector name="http" uri="http://0.0.0.0:9090?transport.maximumConnections=1000&transport.wireFormat.maxFrameSize=104857600&transport.keepAlive=true&transport.trace=true&transport.useKeepAlive=true&transport.connectionTimeout=30000" />
</transportConnectors>
有了这个配置,我可以使用例如http://localhost:9090
连接到我的ActiveMQ。
现在我正在迁移到Artemis 2.28.0版本,当我尝试配置http连接器时:
<connectors>
<connector name="http-connector">http://0.0.0.0:8080?httpEnabled=true</connector>
</connectors>
但是当我们启动代理时,出现了schema未找到的错误:
java.lang.RuntimeException: Schema http not found
at org.apache.activemq.artemis.core.config.ConfigurationUtils.parseConnectorURI(ConfigurationUtils.java:190)
at org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser.parseConnectorTransportConfiguration(FileConfigurationParser.java:1622)
我们也尝试配置它使用tcp
连接与httpEnabled=true
根据Artemis文档(见"配置Netty HTTP"),但这也没有错,当我们尝试使用HTTP连接。
我们已经有多个消费者连接到ActiveMQ "Classic"通过HTTP,我们的目标是做一个从"经典"的DNS切换。而不影响我们的消费者,因为很难与所有人交谈。这是一个场景:http://broker:8080
现在指向ActiveMQ "Classic"我们想把这个域重新路由到Artemis。
不幸的是,这是不可能的,因为Artemis不支持OpenWire客户端使用的HTTP传输。正如您在文档中发现的那样,Artemis具有通过HTTP为核心协议建立隧道通信的等效特性,但它与OpenWire不兼容。
一般来说,HTTP不是一个很好的消息传递协议,很少被推荐。在"正常"的特殊情况下,它可以作为一种权宜之计。由于某种原因无法连接。