Брокер ActiveMQ затмевает Paho Mqtt-клиент, как настроить длительного абонента? - PullRequest
0 голосов
/ 12 октября 2018

Я работаю над приложением для Android с клиентом eclipse paho mqtt и брокером ActveMQ.Я уже установил для setCleanSession значение false, но когда я смотрю на веб-консоль activeMQ, клиент все еще отображается в списке активных недолговечных подписчиков тем, есть ли способ решить эту проблему?

Клиент Android:

private void initMqtt() {
    try {
        mqttClient = new MqttClient(
                HttpUrlManager.MQURL,
                Build.SERIAL,
                new MemoryPersistence()
        );
        mqttClient.setCallback(this);
        mqttOptions = new MqttConnectOptions();
        mqttOptions.setCleanSession(false);
        mqttOptions.setConnectionTimeout(10);
        mqttOptions.setKeepAliveInterval(10);
        mqttClient.setCallback(this);

        mqttClient.connect();
        mqttClient.subscribe(MQTT_TOPIC_TEST,2);
    } catch (Exception e) {
        e.printStackTrace();
    }

Брокер:

public void sendMessage(Session session, MessageProducer producer) throws Exception {
    String message = "message" + (++messageCount) + ",time:" + LocalDateTime.now();
    TextMessage text = session.createTextMessage(message);

    System.out.println(message);
    producer.send(text);
}

public App() {
    ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, BROKER_URL);
    try {
        connection = factory.createConnection();
        connection.start();
        session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        destination = session.createTopic(DESTINATION);
        producer= session.createProducer(destination);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

public void run() throws Exception {
    try {
        sendMessage(session, producer);
        session.commit();

    } catch (Exception e) {
        e.print();
    }
}

public static void main(String[] args) throws Exception {
    App a = new App();
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            try {
                a.run();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }, 100,5000);
}

}

...