【问题标题】:How to Subscribe Multiple topic and Multiple MqttCallback Using PAHO on Java如何在 Java 上使用 PAHO 订阅多个主题和多个 MqttCallback
【发布时间】:2016-04-05 11:34:33
【问题描述】:
static String[] meandgroup = new String[]{"timentask/c/u000000000005", "timentask/c/u0000000GRP85", "timentask/c/u000000GRP107", "timentask/c/u0000000GRP84", "timentask/c/u000000GRP100"};
    public static List<MqttClient> mqttConnect(Object topicId) {
        try {
            mqttClient = new ArrayList<MqttClient>();
            for (int i = 0; i < meandgroup.length; i++) {
                //if (mqttClient.get(i) == null || !mqttClient.get(i).isConnected()){
                if (!globalData.GlobalDataSetGet.MQTT_SERVER_HOST_NAME.equals("") && !globalData.GlobalDataSetGet.MQTT_SERVER_USER_NAME.equals("")) {
                    String topicName = meandgroup[i];
                    mqttClient.add(MqttMgr.subscriber(globalData.GlobalDataSetGet.MQTT_SERVER_HOST_NAME,
                            globalData.GlobalDataSetGet.MQTT_SERVER_PORT_NUMBER, globalData.GlobalDataSetGet.MQTT_SERVER_USER_NAME,
                            globalData.GlobalDataSetGet.MQTT_SERVER_USER_PASSWORD, Constants.MQTT_CONNECTION_KEEP_ALIVE_SECS, topicName, "client" + globalData.GlobalDataSetGet.getUserIdValue, new ChatPaneWrite()));
                }
            }
        } catch (MqttException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mqttClient;
    }

【问题讨论】:

  • 您需要准确解释您正在尝试做什么以及什么不起作用
  • 如何在 Java 上使用 PAHO 订阅多个主题和多个 MqttCallback
  • Amazon MQTT 云服务器有 n 个主题,我尝试使用动态 5 个主题保持连接/订阅并回调给我。谁发布了这 5 个各自的主题。

标签: java mqtt


【解决方案1】:

您似乎正在尝试为每个订阅创建一个新的 MQTT 客户端,这对于大多数应用程序来说可能是非常不必要的。您最好只使用一个客户端,然后使用主题数组进行订阅(如此处所述: subscribe(String[] topicFilters, int[] qos)) 例如

mqttAsyncClient.subscribe(["/topic1", "/topic2", "/topic3"], [0,1,2]);

当任何消息被传递到您的 MqttCallback 时,也会提供消息发布到的主题,因此您仍然能够知道消息来自哪里并能够相应地路由它。

【讨论】:

  • MqttException (0) - 连接丢失 (32109) - mqttconfig.MqttMgr.getMqttClient(MqttMgr.java:91) 处的 mqttconfig.MqttMgr.subscriber(MqttMgr.java:35) 处的 java.io.EOFException在 mqttconfig.MqttUtil.mqttConnect(MqttUtil.java:38) 在 LogIn$49$4.doInBackground(LogIn.java:2003) 在 LogIn$49$4.doInBackground(LogIn.java:1999)
【解决方案2】:

MQTT 允许您以通配符方式订阅任何主题。这意味着,您实际上不需要订阅所有主题。 "timentask/c/u000000000005", "timentask/c/u0000000GRP85" 相反,订阅"timentask/c/#"

【讨论】:

  • 如果我这样做,我会从 mqtt 聊天服务器获得所有传入的发布消息!!!!!!。明白我的?回答尝试一下,对 timentask/c/z/u000000000005 执行 timentask/c/a/u000000000005 但我只需要 timentask/c/a/u000000000005,timentask/c/b/u000000000005 和 timentask/c/c/u000000000005 这三个
  • Amazon MQTT 云服务器有 n 个主题,我尝试使用动态 5 个主题保持连接/订阅并回调给我。谁发布了这 5 个各自的主题。
猜你喜欢
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多