RocketMQ代码实战(二):RocketMQ发送带Tag的消息

RocketMQ代码实战(一):使用rocketmq-spring-boot-starter发送和消费消息 讲解了使用rocketmq-spring-boot-starter快速搭建生产者消费者服务,本次继续讲解 发送带Tag的消息

Tag(标签)可以看作子主题,它是消息的第二级类型。同一业务模块不同目的的消息就可以用相同 Topic 而不同的 Tag来标识。比如交易消息又可以分为:交易创建消息、交易完成消息等,一条消息可以没有 Tag。

1.发送消息

@RestController
public class RocketMqController {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;


    @GetMapping("sendMqWithTag")
    public Object sendMqWithTag() {
        MqMessage message = MqMessage.builder().name("tag消息").msg("这是tag消息").build();
        SendResult sendResult = rocketMQTemplate.syncSend(MqUtil.tag_topic+ ":" + MqUtil.tag, message);
        return sendResult;
    }
}

其他常量如下

public class MqUtil {

    public static final String tag_topic = "tag_topic";

    public static final String tag = "tag";
}

可见通过 RocketMQTemplate发送带Tag的消息,只需要将topic和tag中间通过【:】冒号连接即可

2.消费消息

@Slf4j
@Component
@RocketMQMessageListener(
        topic = MqUtil.tag_topic,
        selectorType = SelectorType.TAG,
        selectorExpression = MqUtil.tag,//指定了tag后,发送的消息如果不带tag,将会消费不到
        consumerGroup = "tag_consumer_group")
public class TagMsgListener implements RocketMQListener<MqMessage> {
    @Override
    public void onMessage(MqMessage message) {
        log.info("{}收到消息:{}", this.getClass().getSimpleName(), message);
    }
}

启动后,访问:http://127.0.0.1:8080/sendMqWithTag 控制台打印日志:

TagMsgListener收到消息:MqMessage(name=tag消息, msg=这是tag消息)

可见:

通过selectorType属性指定消费的选择类型为Tag,这个类型也是selectorType属性的默认值

通过selectorExpression属性来选择消费的Tag。默认是"*",即会消费该topic下所有的Tag的消息。

需要注意的是:

1.如果我们的消费者指定了消费的Tag后,发送的消息如果不带tag,将会消费不到;

2.如果我们的生产者指定了Tag,但是消费者的selectorExpression没有设置,即用默认的“*”,那么这个消费者也会消费到。

 

 

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值