在使用rocketmq时,发现消费者只能受到部分消息(消费者tag里定义的tag),查看监控器总是显示消息被过滤,解决方式(注意private String tag = "tag1";)
private String consumerGroup = "consumerTopic";
private String namesrvAddr = "127.0.0.1:9876";
private String topic = "supplyTopic";
private String tag = "tag1";
private DefaultMQPushConsumer consumer;
@Resource
private MessageListenerConcurrently messageListenerConcurrentlyImpl;
public void init() {
this.consumer = new DefaultMQPushConsumer(consumerGroup);
consumer.setNamesrvAddr(namesrvAddr);
try {
//订阅testTopic下的所有tag
consumer.subscribe(topic, tag);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.registerMessageListener(messageListenerConcurrentlyImpl);
consumer.start();
log.info("RocketMQ consumer启动成功");
} catch (Exception e) {
e.printStackTrace();
log.error("RocketMQ consumer 启动异常!", e);
}
}
将private String tag = "tag1";修改为String tag = "*";这样就能接收到所有的信息了。(在同一个类中(也就是一个消费者中),同一个topic对应不同的tag,应该使用 “ || ”进行分割,使用""或“*”订阅所有tag。)
topicTags = ("${haha.mq.topic:TEST_HAHA}:${haha.mq.topic:TEST_TAG01}||" + "${haha.mq.topic:TEST_TAG02}") )