WebSocket的MQTT我建立了一個ActiveMQ代理通過TCP和WebSockets向充當MQTT經紀人如下:內嵌的ActiveMQ
BrokerService broker = new BrokerService();
broker.addConnector("mqtt://localhost:1883");
broker.addConnector("ws://0.0.0.0:1884");
broker.setPersistent(false);
broker.setBrokerName("default");
broker.start();
在我的類路徑中,我有以下罐子(因爲我不想有包括SLF4J):
activemq-broker-5.11.1.jar activemq-stomp-5.11.1.jar
activemq-client-5.11.1.jar activemq-web-5.11.1.jar
activemq-http-5.11.1.jar commons-codec-1.6.jar
activemq-mqtt-5.11.1.jar geronimo-j2ee-management_1.1_spec-1.0.1.jar
activemq-openwire-legacy-5.11.1.jar geronimo-jms_1.1_spec-1.1.1.jar
activemq-parent-5.11.1 hawtbuf-1.11.jar
activemq-spring-5.11.1.jar mqtt-client-1.10.jar
javax.servlet-api-3.1.0.jar
javax.servlet.jsp.jstl-1.2.1.jar
javax.servlet.jsp.jstl-api-1.2.1-2.jar
jetty-all-9.2.8.v20150217.jar
slf4j-api-1.7.5
logback-classic-1.0.13
logback-core-1.0.13
當我嘗試使用JavaScript客戶端搞得暈頭轉向,而我的mosquitto客戶管理通過TCP沒有麻煩連接泛美衛生組織連接。
在日誌中,我發現這個行:
DEBUG o.a.a.t.ws.jetty9. MQTTSocket - Waiting for StompSocket to be properly started...
讀我發現了代碼MQTTSocket(它與StompSocket相同;試圖兩者)正在等待,只會在倒計時的CountDownLatch對象DOSTART()。顯然doStart()永遠不會被調用。爲什麼?我怎麼稱呼它?我錯過了什麼?
我的HTML/JavaScript的:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<script src="shared/mqttws31-min.js" type="text/javascript"></script>
<script type="text/javascript">
//sample HTML/JS script that will publish/subscribe to topics in the Google Chrome Console
//by Matthew Bordignon @bordignon on twitter.
var wsbroker = "127.0.0.1"; //mqtt websocket enabled broker
var wsport = 1884 // port for above
var client = new Paho.MQTT.Client(wsbroker, wsport, "",
"myclientid_" + parseInt(Math.random() * 100, 10));
client.onConnectionLost = function (responseObject) {
console.log("connection lost: " + responseObject.errorMessage);
};
client.onMessageArrived = function (message) {
console.log(message.destinationName, ' -- ', message.payloadString);
};
var options = {
timeout: 300,
//mqttVersion: 3, // to constrain the protocol to version 3
onSuccess: function() {
console.log("mqtt connected");
// Connection succeeded; subscribe to our topic, you can add multile lines of these
client.subscribe('/World', {qos: 1});
//use the below if you want to publish to a topic on connect
message = new Paho.MQTT.Message("Hello");
message.destinationName = "/World";
client.send(message);
},
onFailure: function (message) {
console.log("Connection failed: " + message.errorMessage);
}
};
function init() {
client.connect(options);
}
</script>
</head>
<h1>MQTT test</h1>
<body onload="init();">
</body>
</html>
編輯: 我也試過xbeans用自帶的ActiveMQ的改編XML文件配置:
System.setProperty("activemq.conf", "conf");
System.setProperty("activemq.data", "data");
BrokerService broker;
try {
broker = BrokerFactory.createBroker("xbean:activemq.xml");
broker.start();
} catch (Exception e1) {
e1.printStackTrace();
}
XML文件:
- activemq.xml: https://dl.dropboxusercontent.com/u/9632359/activemq.xml
- 的jetty.xml:https://dl.dropboxusercontent.com/u/9632359/jetty.xml
使用jetty8它能夠獨立地連接觸發額外的27行的:」 mqttVersion:3, 「 開啓和關閉。但是,仍然不能發送或接收消息。仍然認爲這是一個配置問題,甚至可能與碼頭? – lukas83