使用paho.mqtt.android连接到几个Mqtt服务器

问题描述 投票:0回答:1

这个库可以为多个服务器提供连接机会吗? https://github.com/eclipse/paho.mqtt.android

我无法从源代码中找出这种情况

例如:

mqttAndroidClient1 = new MqttAndroidClient(getApplicationContext(), "tcp://iot.eclipse.org:1883", clientId);
mqttAndroidClient2 = new MqttAndroidClient(getApplicationContext(), "tcp://iot.blablabla.org:1883", clientId);
....
mqttAndroidClient1.connect(...)
mqttAndroidClient2.connect(...)
android mqtt paho
1个回答
0
投票

好。这是工作。我通过我的语言环境设备和这项服务https://iot.eclipse.org/getting-started#sandboxes进行了测试。

public class MainActivity extends AppCompatActivity {

    private final String TAG =  this.getClass().getSimpleName();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    Handler mHandler = new Handler();
    MqttAndroidClient mqttAndroidClient1;
    MqttAndroidClient mqttAndroidClient2;
    String clientId = "ExampleAndroidClient";
    final String serverUri = "tcp://iot.eclipse.org:1883";
    final String serverUri2 = "tcp://192.168.10.11:1883" ;

    @Override
    protected void onStart() {
        super.onStart();  

        clientId = clientId + System.currentTimeMillis();

        mqttAndroidClient2 = new MqttAndroidClient(getApplicationContext(), serverUri2, clientId+"2");
        mqttAndroidClient2.setCallback(new MqttCallbackExtended() {
            @Override
            public void connectComplete(boolean reconnect, String serverURI) {

                if (reconnect) {
                    Log.i(TAG,"Reconnected to : " + serverURI);
                    // Because Clean Session is true, we need to re-subscribe
                    subscribeToTopic2();
                } else {
                    Log.i(TAG,"Connected to: " + serverURI);
                }
            }

            @Override
            public void connectionLost(Throwable cause) {
                Log.w(TAG,"The Connection was lost.");
            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {
                Log.i(TAG,"Incoming message: " + new String(message.getPayload()));
            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {

            }
        });

        mqttAndroidClient1 = new MqttAndroidClient(getApplicationContext(), serverUri, clientId);
        mqttAndroidClient1.setCallback(new MqttCallbackExtended() {
            @Override
            public void connectComplete(boolean reconnect, String serverURI) {

                if (reconnect) {
                    Log.i(TAG,"Reconnected to : " + serverURI);
                    // Because Clean Session is true, we need to re-subscribe
                    subscribeToTopic1();
                } else {
                    Log.i(TAG,"Connected to: " + serverURI);
                }
            }

            @Override
            public void connectionLost(Throwable cause) {
                Log.w(TAG,"The Connection was lost.");
            }

            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {
                Log.i(TAG,"Incoming message: " + new String(message.getPayload()));
            }

            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {

            }
        });


        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
        mqttConnectOptions.setAutomaticReconnect(true);
        mqttConnectOptions.setCleanSession(false);

        try {
            //addToHistory("Connecting to " + serverUri);
            mqttAndroidClient1.connect(mqttConnectOptions, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
                    disconnectedBufferOptions.setBufferEnabled(true);
                    disconnectedBufferOptions.setBufferSize(100);
                    disconnectedBufferOptions.setPersistBuffer(false);
                    disconnectedBufferOptions.setDeleteOldestMessages(false);
                    mqttAndroidClient1.setBufferOpts(disconnectedBufferOptions);
                    subscribeToTopic1();
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.e(TAG,"Failed to connect to: " + mqttAndroidClient1.getServerURI());
                }
            });

        } catch (MqttException ex){
            ex.printStackTrace();
        }
        try {
            //addToHistory("Connecting to " + serverUri);
            mqttAndroidClient2.connect(mqttConnectOptions, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
                    disconnectedBufferOptions.setBufferEnabled(true);
                    disconnectedBufferOptions.setBufferSize(100);
                    disconnectedBufferOptions.setPersistBuffer(false);
                    disconnectedBufferOptions.setDeleteOldestMessages(false);
                    mqttAndroidClient2.setBufferOpts(disconnectedBufferOptions);
                    subscribeToTopic2();
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.e(TAG,"Failed to connect to: " + mqttAndroidClient2.getServerURI());
                }
            });


        } catch (MqttException ex){
            ex.printStackTrace();
        }

    }

    @Override
    protected void onStop() {
        super.onStop();

    }


    public void subscribeToTopic1(){
        String subscriptionTopic = "/uwblogs";
        try {
            mqttAndroidClient1.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    Log.i(TAG,"Subscribed!");
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.i(TAG,"Failed to subscribe");
                }
            });

            mqttAndroidClient1.subscribe(subscriptionTopic, 0, new IMqttMessageListener() {
                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    // message Arrived!
                    final String str = new String(message.getPayload());
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            ((TextView)findViewById(R.id.textView_server1)).setText(str);
                        }
                    });

                    Log.i(TAG,"Message: " + topic + " : " + new String(message.getPayload()));
                }
            });

        } catch (MqttException ex){
            System.err.println("Exception whilst subscribing");
            ex.printStackTrace();
        }
    }

    public void subscribeToTopic2(){
        String subscriptionTopic = "/devices/wb-adc/controls/Vin";
        try {
            mqttAndroidClient2.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    Log.i(TAG,"Subscribed!");
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.i(TAG,"Failed to subscribe");
                }
            });

            mqttAndroidClient2.subscribe(subscriptionTopic, 0, new IMqttMessageListener() {
                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    // message Arrived!
                    final String str = new String(message.getPayload());
                    mHandler.postAtFrontOfQueue(new Runnable() {
                        @Override
                        public void run() {
                            ((TextView)findViewById(R.id.textView_server2)).setText(str);
                        }
                    });

                    Log.i(TAG,"Message server2: " + topic + " : " + new String(message.getPayload()));
                }
            });

        } catch (MqttException ex){
            System.err.println("Exception whilst subscribing");
            ex.printStackTrace();
        }
    }




}
© www.soinside.com 2019 - 2024. All rights reserved.