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<String> {

    @Override
    @SuppressWarnings("unchecked")
    public void onMessage(String message) {
        Map<String, Object> 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<String, Object> 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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot整合RocketMQ,首先需要在pom.xml文件中添加RocketMQ的依赖。可以通过以下方式添加: ```xml <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>${rocketmq.version}</version> </dependency> ``` 其中`${rocketmq.version}`是RocketMQ的版本号,可以根据需要进行替换。接下来,在application.yml配置文件中进行RocketMQ的相关配置。 关于RocketMQ的结构,可以参考以下组件: - MQConsumerService:用于消费RocketMQ消息的服务。 - MQProducerService:用于发送RocketMQ消息的服务。 - RocketMQController:用于处理RocketMQ相关请求的控制器。 在代码中,可以使用`@RocketMQMessageListener`和`@RocketMQListener`注解来监听RocketMQ消息。例如,在消费者服务中,可以使用以下注解: ```java import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.stereotype.Component; @Component @RocketMQMessageListener(topic = "your_topic", consumerGroup = "your_consumer_group") public class MQConsumerService implements RocketMQListener<MessageExt> { @Override public void onMessage(MessageExt message) { // 处理接收到的消息 } } ``` 在发送者服务中,可以使用以下注解: ```java import org.springframework.stereotype.Service; @Service public class MQProducerService { @Autowired private RocketMQTemplate rocketMQTemplate; public void sendMessage() { // 发送消息的逻辑 } } ``` 以上是一个简单的Spring Boot整合RocketMQ使用示例。具体的实现方式可以根据实际需求进行调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [RocketMQ整合SpringBoot](https://blog.csdn.net/weixin_47638656/article/details/113849725)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值