我試圖訂閱來自Eclipse Paho MQTT客戶端的簡單主題「foo」。Eclipse Kapua經紀人:未授權訂閱主題
代理由Eclipse Kapua管理,可通過tcp:// localhost:1883使用憑證「kapua-broker」和「kapua-password」進行訪問。
我發佈的值是這樣的:
send(new Payload.Builder().put("testKey","testVal"),"foo");
這基本上發送一個地圖( 「密押」, 「名爲testVal的」)的主題爲 「foo」。要訂閱這個話題,我有以下代碼(主機= 「localhost」,則端口= 1883):
String topic = "foo";
String broker = "tcp://"+host+":"+Integer.toString(port);
String clientId = "supply-chain-control-simulation-listener";
String username = "kapua-broker";
String password = "kapua-password";
try {
MqttClient client = new MqttClient(broker, clientId);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
connOpts.setUserName(username);
connOpts.setPassword(password.toCharArray());
connOpts.setCleanSession(true);
logger.info("Connecting to broker: "+broker);
client.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable throwable) {
logger.info("Subscriptions stopped");
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
logger.info(s);
logger.info(mqttMessage.getPayload().toString());
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
});
client.connect(connOpts);
if (client.isConnected())
logger.info("Connected");
else
logger.error(client.getDebug().toString());
client.subscribe(topic,2);
} catch(MqttException me) {
logger.error("reason "+me.getReasonCode());
logger.error("msg "+me.getMessage());
logger.error("loc "+me.getLocalizedMessage());
logger.error("cause "+me.getCause());
logger.error("excep "+me);
me.printStackTrace();
}
的連接工作,但認購輸出這個錯誤:
15:40 :03.240 [ActiveMQ NIO Worker 0]警告oekbcpKapuaSecurityBrokerFilter - 用戶1:kapua-broker(供應鏈控制模擬偵聽器 - tcp://172.17.0.1:40888 - conn id 1734706196170193882)未被授權讀取:話題://VirtualTopic.foo
感謝您的回答。你說得對,這種方式更清潔,但不幸的是我仍然得到相同的錯誤。問題是我不控制經紀人,它是Kapua項目的一部分,並使用它,我只是啓動一個碼頭集裝箱。 –