RocketMQ使用

环境搭建我的文档里有,可参考,本文档更新中。。。。

创建springboot导入依赖

		<dependency>
			<groupId>org.apache.rocketmq</groupId>
			<artifactId>rocketmq-client</artifactId>
			<version>4.4.0</version>
		</dependency>

在这里插入图片描述

发送消息(生产者)

发送同步消息

得到发送结果,通常发送重要消息使用,比方短信等
在这里插入图片描述

发送异步消息

异步有回调函数
在这里插入图片描述

发送单向消息

通过以下方法即可,没有返回值。
一般场景比方日志等。一般用的少,一般不用这种

produer.sendOneWay(message);

消费消息(消费者)

在这里插入图片描述

默认消费模式是负载均衡

消费者广播模式

每个消费者消费一样的消息

//广播模式,默认是负载均衡模式
 consumer.setMessageModel(MessageModel.BROADCASTING);

负载均衡模式

所有消费者共同承担消息的处理

顺序消息

消费顺序和发送顺序一致
我们将消息发送给broker,但是broker不止一个队列。多个队列为了提高效率
broker内部有多个队列,消息进入哪一个队列。broker轮询放入消息
我们将一组消息放入一个队列,然后用一个线程去处理消息,保证局部消息顺序
通过订单标识id,选择队列。同一个订单发送到同一个队列

生产者
在这里插入图片描述
消费者
在这里插入图片描述

延时消息

延迟一段时间
级别,只能选择延迟多久

message.setDelayTimeLevel(3);

批量发送消息

直接发送消息集合即可
每次不能超过4M
如果超过需要进行消息分割

SendResult result = producer.send(messages);

过滤消息

消费者根据条件进行过滤

第一种根据tag进行过滤,通过||符号过滤

tag1 || tag2

第二种通过sql语法来过滤,但是感觉一般通过tag区分好就行了
发送

message.putUserProperty("i",String.valueOf(i));

接收

consumer.subscribe("OrderTopic", MessageSelector.bySql("i>5"));

事务消息

分布式事务一致性(最终一致性)
生产者进行事务提交,如果没有提交都是不能消费的
事务消息状态:提交状态,回滚状态,中间状态
在这里插入图片描述
异常如何处理
监听消息,进行数据回退
出现异常,捕获异常,在异常catch里面进行处理,发送失败消息到mq
将一些信息放入发送类中(订单id,用户id,金额,商品id,数量,等等一些信息)

如何保证消息幂等性
通常,消息id去保证,但是mq不报证id的唯一性
最好使用业务标识id,发送消息,设置key,消费方通过业务key判断是否被处理,把key保存到数据库,每次消费去查询,看是否这个消息被消费过,
还有就是保存到redis中

消息失败处理,默认重试16次后进入死信队列
消息重试几次,可以持久化到消息记录表,通过定时任务去跑这个消息记录表

RocketMq持久化原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值