java - 我无法连接我的 java mqtt 客户端,总是收到无效的连接参数

标签 java activemq mqtt

当我尝试将 mqtt java 客户端连接到任何 mqtt 代理时,我收到 java.lang.IllegalArgumentException: Invalid connect parameters: {wireFormat.host=localhost} 。 我想运行本地客户端和本地服务器,但我 future 的目标是使用远程代理做得更好。

我正在使用 activemq-client 1.15 库和 activemq-mqtt 1.15.9 库(以支持 MQTT 传输协议(protocol))。现在我尝试用java8在eclipse中运行它。

我的配置是下一个:


ActiveMQConnectionFactory amqcf=new ActiveMQConnectionFactory();
amqcf.setClientID("Test-main");
amqcf.setWatchTopicAdvisories(false);
amqcf.setUserName("test");
amqcf.setPassword("test");
amqcf.setBrokerURL("mqtt://localhost:1883");

connection = connectionFactory.createConnection(); //here break

我有其他客户端成功读取同一个经纪人,我认为问题出在这个客户端。

现在,总是会遇到异常:


Exception in thread "main" javax.jms.JMSException: Could not create Transport. Reason: java.lang.IllegalArgumentException: Invalid connect parameters: {wireFormat.host=localhost}
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:333)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:346)
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:304)
    at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:244)
    at simpleactivemqtt.main.start(main.java:60)
    at simpleactivemqtt.main.main(main.java:86)
Caused by: java.lang.IllegalArgumentException: Invalid connect parameters: {wireFormat.host=localhost}
    at org.apache.activemq.transport.TransportFactory.doConnect(TransportFactory.java:130)
    at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:69)
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:331)
    ... 5 more

如果我使用像 amqcf.setBrokerURL("mqtt://localhost:1883"); 这样的 tcp url

我在同一点上遇到其他异常:

Exception in thread "main" javax.jms.JMSException: Disposed due to prior exception
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72)
    at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1421)
    at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1486)
    at org.apache.activemq.ActiveMQConnection.start(ActiveMQConnection.java:527)
    at simpleactivemqtt.main.start(main.java:59)
    at simpleactivemqtt.main.main(main.java:84)
Caused by: org.apache.activemq.transport.TransportDisposedIOException: Disposed due to prior exception
    at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:125)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:114)
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:114)
    at org.apache.activemq.transport.WireFormatNegotiator.onException(WireFormatNegotiator.java:173)
    at org.apache.activemq.transport.AbstractInactivityMonitor.onException(AbstractInactivityMonitor.java:345)
    at org.apache.activemq.transport.TransportSupport.onException(TransportSupport.java:96)
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:219)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.EOFException
    at java.io.DataInputStream.readInt(DataInputStream.java:392)
    at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:268)
    at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:240)
    at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:232)
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)
    ... 1 more


代理具有默认端口,并且启用了 mqtt 传输。我有一个将 mqtt 与 paho 结合使用的 python 脚本。

你能帮我吗? 谢谢!

最佳答案

ActiveMQ JMS 客户端库是基于 Openwire 协议(protocol)的客户端,无法在基于 MQTT 的传输连接器上工作。您必须将 JMS 客户端连接到代理上有效配置的 Openwire 传输连接器端点(通常位于端口 61616 上)。

要连接到 MQTT 连接器,您需要使用 MQTT 客户端,例如 Eclipse Paho Java MQTT client .

关于java - 我无法连接我的 java mqtt 客户端,总是收到无效的连接参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57110340/

相关文章:

java - 小尺寸、高分辨率图像

java - Spring JMS ActiveMQ - 无法让多个消费者同时处理

python - 如何查看mosquitto经纪商订阅的主题

java - 使用 JDK 8 编译泛型方法时的强制转换失败

java - Android:网络浏览器中的 GPS

java - 由于 "received expired message",无法使用来自 ActiveMQ 的消息

java - 在 TLS1.2 上创建 ActiveMQ 连接

javascript - MQTT 客户端不工作

ibm-cloud - 使用 Bluemix IoT Foundation 的 Node-RED 应用程序是否需要设备和应用程序的单独主题?

java - 如何从jsp页面中删除List<>中的元素?