MessageChannel rocketmq 指定 Tag 发送消息

Tag对同组同Topic的消费者有影响,当存在不同Tag的时候,会导致消费混乱,比如TagA的消息被TagB的消费者消费了

发送消息
yml 配置
spring:
  cloud:
    stream:
	  bindings:
		# 生产者 发布告警信息
		binding-rocketmq-producer-alert-info-notify:
		  destination: SPXJ_ALERT_INFO_NOTIFY
		  binder: binder-rocketmq
		  content-type: application/json
代码
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.apache.rocketmq.spring.support.RocketMQHeaders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;

import javax.annotation.Resource;


@Slf4j
@EnableBinding(RocketMqProducerMessageSource.class)
public class NotifyAlertInfoProducer {

    private static final String TAG_CLOCK_SYNC = "clock_sync";

    @Resource
    @Output(RocketMqProducerMessageSource.BINDING_PRODUCER_ALERT_INFO_NOTIFY)
    private MessageChannel channel;

    public void notifyAlertInfo(AlertInfo alertInfo) {
         Message<AlertInfo> msg = MessageBuilder.withPayload(alertInfo)
                        .setHeader(RocketMQHeaders.TAGS, TAG_CLOCK_SYNC)
                        .build();
                channel.send(msg);
    }
}

接收消息
yml配置
spring:
  cloud:
    stream:
      rocketmq:
      	# 设置相应的 tags, 多个使用 || 分割
        bindings:
          binding-rocket-consumer-alert-info-ntp-notify:
            consumer:
              tags: ntp
          binding-rocket-consumer-alert-info-server-notify:
            consumer:
              tags: server
          binding-rocket-consumer-alert-info-other-notify:
            consumer:
              tags: other
      bindings:
        binding-rocket-consumer-alert-info-ntp-notify:
          destination: SPXJ_ALERT_INFO_NOTIFY
          binder: binder-rocketmq
          content-type: application/json
          group: spxj-alert-info-ntp-receive

        binding-rocket-consumer-alert-info-server-notify:
          destination: SPXJ_ALERT_INFO_NOTIFY
          binder: binder-rocketmq
          content-type: application/json
          group: spxj-alert-info-server-receive

        binding-rocket-consumer-alert-info-other-notify:
          destination: SPXJ_ALERT_INFO_NOTIFY
          binder: binder-rocketmq
          content-type: application/json
          group: spxj-alert-info-other-receive
代码






import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.support.RocketMQHeaders;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.Message;

@Slf4j
@EnableBinding(RocketMqCousumerSource.class)
public class AlertInfoNotifyListener {


    /**
     * 时钟告警
     * @param message
     */
    @StreamListener(RocketMqCousumerSource.BINDING_ROCKET_CONSUMER_ALERT_INFO_NTP_NOTIFY)
    public void msgAlertInfoNtpNotifyConsumer(Message<byte[]> message) {
        log.info("消息 TAG: {}", message.getHeaders().get(RocketMQHeaders.PREFIX + RocketMQHeaders.TAGS));
        byte[] payload = message.getPayload();
        log.info("接收到消息: {}", JacksonUtil.byteToObject(payload, AlertInfo.class));
    }

    /**
     * 主机告警
     * @param message
     */
    @StreamListener(RocketMqCousumerSource.BINDING_ROCKET_CONSUMER_ALERT_INFO_SERVER_NOTIFY)
    public void msgAlertInfoServerNotifyConsumer(Message<byte[]> message) {
        log.info("消息 TAG: {}", message.getHeaders().get(RocketMQHeaders.PREFIX + RocketMQHeaders.TAGS));
        byte[] payload = message.getPayload();
        log.info("接收到消息: {}", JacksonUtil.byteToObject(payload, AlertInfo.class));
    }

    /**
     * 其他告警
     * @param message
     */
    @StreamListener(RocketMqCousumerSource.BINDING_ROCKET_CONSUMER_ALERT_INFO_OTHER_NOTIFY)
    public void msgAlertInfoOtherNotifyConsumer(Message<byte[]> message) {
        byte[] payload = message.getPayload();
        log.info("接收到消息: {}", JacksonUtil.byteToObject(payload, AlertInfo.class));
    }
}

参考:
RocketMq中消费者Tag对消息的影响
SpringCloud Stream整合RocketMQ实现消息发送与接收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值