【发布时间】:2019-11-28 07:45:42
【问题描述】:
当我尝试将我的 mqtt java 客户端连接到任何 mqtt 代理时,我得到一个 java.lang.IllegalArgumentException: Invalid connect parameters: {wireFormat.host=localhost} 。
我想运行一个本地客户端和一个本地服务器,但我未来的目标是使用远程代理做得更好。
我正在使用 activemq-client 1.15 库和 activemq-mqtt 1.15.9 库(以支持 MQTT 传输协议)。现在我尝试用 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 脚本。
你能帮帮我吗? 谢谢!
【问题讨论】:
-
我认为 url 应该以 tcp 而不是 mqtt 开头。你试过吗?
-
@JWo 我可以使用 tcp uri 连接到端口 1883(代理中的 mqtt)吗? (我是这个领域的新手哈哈)
-
当我连接到 mqtt 代理时,我使用类似 tcp://example.com 的东西。您的图书馆可能没有必要这样做。我不知道那个图书馆。用“tcp://localhost”试一次,用“localhost”试一次。端口 1883 是默认的 mqtt 端口。我想您不必将其添加到您的经纪人网址中。
-
谢谢,我试试并编辑问题。该库中的协议(tcp 或 mqtt)是强制性的