rocketmq安装和使用 高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?

高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?消息中间件消息不丢失主要从以下几个方面考虑投递生产者向消息中间件投递消息是push的方式,这种方法会出现以下情况1、生产者挂掉了情况是这样的,

高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?

消息中间件消息不丢失主要从以下几个方面考虑

投递

生产者向消息中间件投递消息是push的方式,这种方法会出现以下情况

1、生产者挂掉了

情况是这样的,你的生产者收到了数据,并存到了数据库中,同时生产者要降消息push到消息中间件做异步处理。这时候如果生产者挂掉了,就导致消息数据没有push到消息中间件里,也就会出现数据不一致的问题。

这时候我们可以在数据库设置是否投递成功标志位,在生产者push之后,再将标志位设置为已经投递。另外,客气启动一个定时任务,检测是否有消息没有投递,保证消息数据一定会进入中间件。

2、消息重试

生产者没有挂掉,但是因为网络等其他问题,导致生产者不知道有没有投递成功。这时候生产者可以失败重试,这保证消息可以再次投递。但是这有可能会出现重复投递,导致出现中间件消息数据重复。

存储

消息中间件是存到磁盘上的,存入磁盘的消息一般是不会丢失的,同时磁盘文件还会做备份。如果一个丢失了,可以通过备份文件恢复。

消费

一般消费者需要在消费者消费成功之后再设置提交消费位点。如果消费失败,消费者不提交消费位点还是可以消费该数据的。这就引出一个问题就是消息重复消费。这个问题和上边提到的消息重复投递相同,都会导致重复消费,这就需要考虑消费的幂等性,可以做消费记录,防止重复消费。

如何查看rocketmq mqbroker是否启动?

a: 查看具体命令的使用 : sh mqadmin

b: sh mqadmin help 命令名称

例如,查看 updateTopic 的使用

sh mqadmin help updateTopic

2. 关闭nameserver和所有的broker:

进入到bin下:

sh mqshutdown namesrv

sh mqshutdown broker

3. 查看所有消费组group:

sh mqadmin consumerProgress -n 192.168.1.23:9876

4. 查看指定消费组下的所有topic数据堆积情况:

sh mqadmin consumerProgress -n 192.168.1.23:9876 -g warning-group

5. 查看所有topic :

RocketMQ宕机后如何重启?

RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:1、支持严格的消息顺序;2、支持Topic与Queue两种模式;3、亿级消息堆积能力;4、比较友好的分布式特性;5、同时支持Push与Pull方式消费消息;