paho java 消息过滤

环境信息

  • EMQX 版本:
  • 操作系统及版本:
  • 其他

问题描述

普通订阅(非共享订阅)想根据topic的不同去执行不同的消费逻辑,可以用 每个主题建一个消费者类,然后消费者类实现implements IMqttMessageListener的形式去实现吗?还是说implements IMqttMessageListener只适用于共享订阅呢。我是想做到共享和非共享代码的通用性。望指教,谢谢。

配置文件及日志

讲道理应该是一样的。共享订阅在客户端这边应该没有什么特别的地方。
不过你最好自己测测…

我是想问,非共享订阅模式,每个消费者绑定一个监听,在messageArrived回调函数里,根据不同的监听去按照topic分发,这种方式是否可行?

代码如下:
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
for (SubscriptTopic subscriptTopic: subscriptTopicList) {
String topicFilter = subscriptTopic.getTopic();
if (isMatched(topicFilter, topic)) {
subscriptTopic.getMessageListener().messageArrived(topic, mqttMessage);
}
}
}

@Topic(topic = “/test/1”,patten = Pattern.NONE)
@Slf4j
public class Consumer1 implements IMqttMessageListener {
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
String message = mqttMessage.getPayload().toString();
log.info(“Consumer1 接受到主题:{}, message: {}”, s, message);
}
}

@Topic(topic = “/test/2”,patten = Pattern.NONE)
@Slf4j
public class Consumer2 implements IMqttMessageListener {
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
String message = mqttMessage.getPayload().toString();
log.info(“Consumer2 接受到主题:{}, message: {}”, s, message);
}
}

注意:我说的是非共享订阅模式,非共享,非共享,这种写法是否有问题,我的目的是想按照topic区分不同的消费逻辑。