RocketMq实现单条发送,批量消费

本文详细介绍了如何在SpringBoot项目中集成RocketMq5.2.0,包括服务器配置、图形界面安装、生产者发送大量消息和消费者消费的示例,以及注意事项和设置参数的解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.传送门

安装RocketMq,RocketMq图形界面,spring boot集成RocketMq,参考以下三篇

本文安装版本是目前最新版RocketMq 5.2.0

安装RocketMq(服务器Mq配置外网IP)_rocket mq如何不使用ip连接-优快云博客

RocketMq安装控制台图形界面_rocketmq图形化界面-优快云博客

Spring Boot集成RocketMq(一看就会)_springboot集成rocketmq-优快云博客

RocketMq实现单条发送,批量消费

2.pom依赖修改

boot集成RocketMq版本号是2.3.0(也就是原生的5.2.0版本),服务端同样也是最新的版本5.2.0

           <dependency>
                <groupId>org.apache.rocketmq</groupId>
                <artifactId>rocketmq-spring-boot-starter</artifactId>
                <version>2.3.0</version>
            </dependency>

3.生产者

    @GetMapping("/sendManyMessage")
    public String sendManyMessage() {
        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("message", "hello Word");
        int count = 400;
        for (int i = 0; i < count; i++) {
            rocketMQTemplate.convertAndSend(JmsConfig.TOPIC, hashMap.toString() + i);
            System.out.println("第 " + i + " 次发送成功");
        }
        return "发送Mq成功,共发送 " + count + "次";
    }

4.消费者编写


import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
import org.springframework.stereotype.Component;

import com.wlh.conf.JmsConfig;

@Component
@RocketMQMessageListener(topic = JmsConfig.TOPIC, consumerGroup = "my-consumer-group")
public class Consumer implements RocketMQListener<MessageExt>, RocketMQPushConsumerLifecycleListener {
	@Override
	public void onMessage(MessageExt message) {
		String formattedTime = DateTimeFormatter.ofPattern("HH:mm:ss:SSS").format(LocalDateTime.now());
		System.out.println(formattedTime + ": Mq消费成功,消费内容=====" + new String(message.getBody()));
	}

	// DefaultMessageListenerConcurrently中的consumeMessage中debug查看是否生效
	//maxTransferCountOnMessageInMemory=100;mq中设置最大拉取数量100
	@Override
	public void prepareStart(DefaultMQPushConsumer consumer) {
		consumer.setPullInterval(5000);
		//消费者一次处理的消息的最大批次
		consumer.setConsumeMessageBatchMaxSize(100);
		//费者一次从消息队列中拉取的消息批次大小
		consumer.setPullBatchSize(100);
        // 为了看到效果,暂时只让一个线程拉取消息(mq默认20)
		consumer.setConsumeThreadMax(1);
		consumer.setConsumeThreadMin(1);
		System.out.println("myDefaultMQPushConsumer init");
	}
}

5.查看是否生效

在DefaultMessageListenerConcurrently类中的consumeMessage方法中debug查看参数msgs的大小即可知道有没有生效

6.注意

1.RocketMq默认最大是32,如果超过32 时,RocketMq服务端需要修改/conf/broker.conf 

maxTransferCountOnMessageInMemory=100

2.setConsumeMessageBatchMaxSize 这个是最大数量,不超过这个数量,不一定每次都一样的,而且跟生产速度和总条数有关系,我设置的每次消费100条,发了400条消息,则分四次消费,每次消费100条消息

但是如果我设置的每次消费100条,发了320条消息,但实际也是分四次消费的,每次消费80条,这是mq中有自己一套消费机制的

如果想要看效果的话,可以生产者、消费者分开写,生产者先完全发送消息后,再启动消费者,

确保信息全部发送RocketMq后再启动消费者

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值