首页 > 其他分享 >rocketMq springboot2 发送有序消息

rocketMq springboot2 发送有序消息

时间:2022-11-14 14:47:38浏览次数:35  
标签:TOPIC 14 broker 发送 springboot2 2022 org import rocketMq

有序消息:所有信息往mq中,在broker.conf配置文件中指定产生队列数量。

如果是普通队列时,所有消息,会分发到默认队列的各个队列中。是无序的。

有序则是,所有消息发送,都指定一个队列进行发送,而消费的消息也是一个接着一个消费。

主要应用场景:比如商品库存扣减,银行余额处理,订单处理结果等

[root@localhost ~]# mqadmin consumerProgress -g GID-LOG
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Topic                            #Broker Name                      #QID  #Broker Offset        #Consumer Offset      #Client IP           #Diff                 #LastTime
%RETRY%GID-LOG                    broker-a                          0     19                    19                    N/A                  0                     2022-10-24 20:37:52
TOPIC-SYS-MESSAGE                 broker-a                          0     4356                  4356                  N/A                  0                     2022-11-14 14:16:05
TOPIC-SYS-MESSAGE                 broker-a                          1     4370                  4370                  N/A                  0                     2022-11-14 14:16:05
TOPIC-SYS-MESSAGE                 broker-a                          2     4371                  4371                  N/A                  0                     2022-11-14 14:18:52
TOPIC-SYS-MESSAGE                 broker-a                          3     4363                  4363                  N/A                  0                     2022-11-14 14:18:52
TOPIC-SYS-MESSAGE                 broker-a                          4     4372                  4372                  N/A                  0                     2022-11-14 14:16:05
TOPIC-SYS-MESSAGE                 broker-a                          5     4358                  4358                  N/A                  0                     2022-11-14 14:18:52
TOPIC-SYS-MESSAGE                 broker-a                          6     4354                  4354                  N/A                  0                     2022-11-14 14:15:36
TOPIC-SYS-MESSAGE                 broker-a                          7     4338                  4338                  N/A                  0                     2022-11-14 14:16:04

 

消息生产者:

主要是使用发送的方法是这个syncSendOrderly,指定accountId 发送

import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.ccjr.api.utils.MqUtils;
import com.ccjr.base.BaseMqRequest;
import com.ccjr.commons.constants.RocketMqConstants;

import lombok.extern.slf4j.Slf4j;

/**
 * @desc:业务系统订单计算
 * @author 陈惟鲜
 * @date 2021年7月27日 下午2:01:02
 */
@Slf4j
@Component
public class OrderHandleSender {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    /**发送订单回报更新*/
    public void sendMessage(BaseMqRequest baseMqRequest) {
        // 发送前调用
        String jsonMsg = JSON.toJSONString(baseMqRequest);
        
        String destination = RocketMqConstants.TOPIC_A + ":" + RocketMqConstants.TAG_BIZ_ORDER_A;
        String accountId = baseMqRequest.getAccountId();
        SendResult sendResult = rocketMQTemplate.syncSendOrderly(destination, MessageBuilder.withPayload(jsonMsg).build(), accountId);
        log.info("sendMessage to topic {} sendResult={}", destination, sendResult);
    }
}

 

消息消费者:

指定消费模式:

consumeMode = ConsumeMode.ORDERLY
import java.util.Date;

import org.apache.commons.lang.StringUtils;
import org.apache.rocketmq.spring.annotation.ConsumeMode;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONObject;

import lombok.extern.slf4j.Slf4j;

/**
 * @desc:2、委托交易完成后通知订单处理
 * @author 陈惟鲜
 * @date 2021年7月27日 下午1:47:31
 */
@Slf4j
@Component
@RocketMQMessageListener(topic = RocketMqConstants.TOPIC_A,
        consumerGroup = RocketMqConstants.G_TAG_BIZ_ORDER_A,
        selectorExpression = RocketMqConstants.TAG_BIZ_ORDER_A,
        consumeMode = ConsumeMode.ORDERLY)
public class OrderHandleListener implements RocketMQListener<String> {
    
    @Override
    public void onMessage(String messageContext) {
        Date startTime = new Date();
        BaseMqRequest baseRequest = null;
        Exception ex = null;
        EntrustOrderResultDTO entrustOrderResultDTO = null; // 合并回报汇总
        try {
            String msg = "订单更新账单监听"+RocketMqConstants.TAG_BIZ_ORDER_HANDLE_RESULT+" 订单更新执行:\n"+messageContext;
            log.info(msg);
        }catch(Exception e) {
            log.error("接收处理异常", e);
            ex = e;
        }finally {
            if (baseRequest != null) {
                LogVo logVo = logSaveHelper.initLogVoOrderHandleListener(baseRequest, ex, entrustOrderResultDTO, startTime);
            // 入库mongodb
                logMongoHelper.saveLog(logVo, MongoNameConstants.MG_LOG_BIZ);
            }
        }
    }
}

 

标签:TOPIC,14,broker,发送,springboot2,2022,org,import,rocketMq
From: https://www.cnblogs.com/a393060727/p/16888974.html

相关文章

  • 正确的邮件发送格式?
    1.收件人:做这件事情的人抄送人:只需要知道这件事就可以主体:用一句话来概括内容.关于...的... 2.dear,allhi,all3.这是我,...详情请看附件附件1-2个可以,直接上传,多个附......
  • rocketMq springboot2接入配置
    rocketmq的接入配置。 引入jar包<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId></dependen......
  • rocketMq 安装与配置
    下载rocketmq-all-4.7.1-bin-release.zip上传到服务器 /app/rocketmq,并且解压#mkdir-p/app/rocketmq#tar-zxvfrocketmq-all-4.7.1-bin-release.zip[root@lo......
  • 如何实现发送评论时总数自动加一
    使用事件中心,数据操作中的数量查询获取总数,实现总数的实时显示效果展示前置准备使用循环容器制作的评论列表评论数据表,包含一个评论字段已实现发送评论,实时显示评论具体步骤......
  • 如何实现发送评论时总数自动加一
    使用事件中心,数据操作中的数量查询获取总数,实现总数的实时显示效果展示前置准备使用循环容器制作的评论列表评论数据表,包含一个评论字段已实现发送评论,实时显示评论具体步骤......
  • Java 使用JavaMail通过Gmail发送电子邮件
    JavaMail提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API可以方便地执行一些常用的邮件传输。可以基于JavaMail开发出类似于MicrosoftOutlook......
  • qq机器人发送语音 报错:音频转码到amr失败,请确认你的ffmpeg可以处理此转换
    前提基于oicq开发的qq机器人当接收到用户指令后发送请求返回音乐问题在windows上无报错,可正常运行,但在linux上就会出现问题报错内容音频转码到amr失败,请确认你的ffm......
  • rocketmq环境搭建-windows
    最近使用到了rockmetmq,官网上有快速开始的指导,简单记录下自己搭建的过程;1、先到官网下载mq:https://rocketmq.apache.org/download/,我这里下载的是:rocketmq-all-4.9.2-bin-......
  • (作者推荐)【RocketMQ入门到精通】— RocketMQ中级特性能力 | ​长轮询Pull和Push模式
    名言警句任何先进的技术均与魔法无异追本溯源【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】RocketMQ消费机制回顾   在众多MQ的体系中,一......
  • 11-SpringBoot2整合Vue最简入门
    vuejs入门环境搭建》1:导入文件<scripttype="text/javascript"src="js/vue.js"></script><scripttype="text/javascript"src="js/axios.js"></script>》2:准备app视......