Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActiveMQ+;MQTT+;订阅;ActiveMQ.Advisory.Connection“;_Java_Jms_Activemq_Mqtt_Paho - Fatal编程技术网

Java ActiveMQ+;MQTT+;订阅;ActiveMQ.Advisory.Connection“;

Java ActiveMQ+;MQTT+;订阅;ActiveMQ.Advisory.Connection“;,java,jms,activemq,mqtt,paho,Java,Jms,Activemq,Mqtt,Paho,这就是背景: Java应用程序通过MQTT(Paho 0.4.0)从ActiveMQ 5.9.1订阅主题“ActiveMQ.Advisory.Connection”: 与ActiveMQ的连接建立良好。本主题提供有关ActiveMQ中的连接(打开/关闭)的信息,但我的问题是我捕获的消息是空的: MQTT Mesage到达[ActiveMQ/Advisory/Connection]Msg[] 是否有任何方法可以使用MQTT捕获它们?或者我应该使用JMS来实现这一点 谢谢, Jon Ander。问题

这就是背景:

Java应用程序通过MQTT(Paho 0.4.0)从ActiveMQ 5.9.1订阅主题“ActiveMQ.Advisory.Connection”:

与ActiveMQ的连接建立良好。本主题提供有关ActiveMQ中的连接(打开/关闭)的信息,但我的问题是我捕获的消息是空的:

MQTT Mesage到达[ActiveMQ/Advisory/Connection]Msg[]

是否有任何方法可以使用MQTT捕获它们?或者我应该使用JMS来实现这一点

谢谢,
Jon Ander。

问题是您希望MQTT客户机在作为消息主体的咨询主题上收到什么。通知通常包括许多信息作为消息属性,但是这些信息不能映射到MQTT,因为MQTT消息没有属性。连接通知的正文是用于创建连接的ConnectionInfo对象的副本。在MQTT方面,您对此无能为力,因为您将接收到的只是该对象的序列化字节,而您无法对其执行任何操作

谢谢你,蒂姆。如果ActiveMQ能够使用JSON等标准格式共享连接信息,那就太好了。您可以打开一个增强请求,让负载对象以XML或JSON的形式发送,类似于STOMP客户端的工作方式。因为没有消息头,所以无法向客户机指示内容类型,客户机必须支持默认情况下发送的任何内容。
public class SupervisorMqttClient implements MqttCallback {

    private MqttClient client = null;
    private MemoryPersistence persistence = null;
    private MqttConnectOptions connOpts = null;

    private final int STATUS_OK = 0;
    private final int STATUS_ERROR = 1;

    private String mqttServer = null;
    private String clientId = null;
    private int status = STATUS_OK;

    public SupervisorMqttClient() {
        try {
            this.init();
        } catch (MqttException e) {
            Logger.error(e.getLocalizedMessage());
            Logger.debug(e);
        }
    }

    private void init() throws MqttException {
        Properties props = PropertiesManager.getInstance("supervisor");

        mqttServer = props.getProperty("supervisor.mqtt.server");
        String supervisorID = props.getProperty("supervisor.mqtt.client.number");
        clientId = Supervisor.APP_NAME+"-"+supervisorID;

        connOpts = new MqttConnectOptions();
        connOpts.setKeepAliveInterval(30);
        connOpts.setCleanSession(true); // important non-durable

        persistence = new MemoryPersistence();

        client = new MqttClient(mqttServer, clientId, persistence);
        connectAndSubscribe();
    }

    private void connectAndSubscribe() throws MqttSecurityException, MqttException {
        try {
            client.connect(connOpts);
            client.setCallback(this);
            client.subscribe("ActiveMQ/Advisory/Connection");
        } catch (MqttSecurityException e) {
            Logger.error(e.getLocalizedMessage());
            Logger.debug(e);
        } catch (MqttException e) {
            Logger.error(e.getLocalizedMessage());
            Logger.debug(e);
            processError(e);
        }
    }

    public void publish(String orderType, JSONObject jsonExtraData) {
        if (status == STATUS_ERROR) {
            connectAndSubscribe();
        }
        if (status == STATUS_OK) {
            // some code here
        }
    }

    @Override
    public void connectionLost(Throwable err) {
        Logger.info("Connection lost");
    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken arg0) {
        Logger.info("deliveryComplete");
    }

    @Override
    public void messageArrived(String topic, MqttMessage msg) throws Exception {
        System.out.println("MQTT Mesage Arrived[" + topic + "] Msg[" + msg.toString() + "]");
    }

    private void processError(MqttException e) {
        status = STATUS_ERROR;
        try {
            if (client.isConnected()) {
                Logger.error("disconnecting");
                client.disconnect();
            }
        } catch (MqttException ex) {
            Logger.error(ex.getLocalizedMessage());
            Logger.debug(ex);
        }
    }
}