springboot整合rocketmq(使用的是RocketMQTemplate)

1.rocketMq环境搭建

官网下载地址:https://rocketmq.apache.org/download(4.9.0)
下载解压后运行:windows环境下启动命令(如果使用的是JDK11可能出现启动失败的情况,需要删除一些VM配置)
start mqnamesrv.cmd
start mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true

2.配置文件连接MQ

# 配置 rocketmq
rocketmq:
  name-server: 127.0.0.1:9876
  consumer:
    message-model: CLUSTERING
  #生产者
  producer:
    #生产者组名,规定在一个应用里面必须唯一
    group: my-producer-group
    #消息发送的超时时间 默认3000ms
    send-message-timeout: 3000
    #消息达到4096字节的时候,消息就会被压缩。默认 4096
    compress-message-body-threshold: 4096
    #最大的消息限制,默认为128K
    max-message-size: 4194304
    #同步消息发送失败重试次数
    retry-times-when-send-failed: 2
    #在内部发送失败时是否重试其他代理,这个参数在有多个broker时才生效
    retry-next-server: true
    #异步消息发送失败重试的次数
    retry-times-when-send-async-failed: 2

3.代码实现

1.引入rocketmq依赖: implementation ‘org.apache.rocketmq:rocketmq-spring-boot-starter:2.2.1’

2.直接写一个延迟消息,简单发送就不演示了,可以去我的个人仓库看源代码。编写延迟consumer:(maxReconsumeTimes,失败重试次数)

import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
@RocketMQMessageListener(topic = "test-topic-delay", consumerGroup = "test-delay", maxReconsumeTimes = 1)
@Slf4j
public class RocketMQDelayConsumerListener implements RocketMQListener {

    @Override
    @SuppressWarnings("unchecked")
    public void onMessage(String message) {
        Map orderMap = JSONObject.parseObject(message, Map.class);
        String orderNumber = String.valueOf(orderMap.get("orderNumber"));
        String createTime = String.valueOf(orderMap.get("createTime"));
        //根据orderNumber 查询订单状态,若为未支付,则消息订单并修改库存
        //....
        log.info("延时消息消费:{},消费时间:{}", JSONObject.toJSONString(orderMap), DateUtil.now());
    }
}

接着编写生产者:

  /**
     * 发送延时消息
     */
    @GetMapping("/testDelaySend/{delayLevel}")
    public void testDelaySend(@PathVariable("delayLevel") Integer delayLevel) {

        Map orderMap = new HashMap<>();
        orderMap.put("orderNumber", "1357890");
        orderMap.put("createTime", DateUtil.now());

        //参数一:topic   如果想添加tag,可以使用"topic:tag"的写法
        //参数二:Message
        //参数三:消息发送超时时间
        //参数四:delayLevel 延时level  messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
        //参数四 可在broker.conf中修改messageDelayLevel,然后启动时-c指定config启动
        rocketMQTemplate.syncSend("test-topic-delay", MessageBuilder.withPayload(JSONObject.toJSONString(orderMap)).build(),
                3000, delayLevel);
        log.info("延迟消息发送:{}", JSONObject.toJSONString(orderMap));
    }

4. 其他说明

使用RocketMQTemplate的话可以不用像直接使用rocketmq那样配置复杂,很大程度上简化了代码,学习起来也跟简单。最后附上代码地址:https://github.com/yangzp11/yangzp

你可能感兴趣的:(rocketMq,springboot,spring,boot,rocketmq)