如何避免消息重复投递或重复消费?
在消息生产时,MQ 内部针对每条生产者发送的消息生成一个 inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列;在消息消费时,要求消息体中必须要有一个 bizId(对于同一业务全局唯一,如支付 ID、订单 ID、帖子 ID 等)作为去重的依据,避免同一条消息被重复消费。
系统可用性
系统引入外部依赖越多,系统稳定性越差,一旦MQ宕机,就会对业务造成影响。
系统复杂度提供
MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?如何保证消息传递的顺序性?
一致性问题
A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败。如何保证消息数据处理的一致性?
RabbitMq 基于AMQP这个协议的,Advanced Message Queuing Protocol,(高级消息队列协议),是一个网络协议
参考链接
【1】laravel使用rabbitmq
【2】lumen访问rabbitmq
【3】消息队列Kafka、RocketMQ、RabbitMQ的优劣势比较
【4】configure: error: Cannot find php-config. Please use --with-php-config=PATH 错误的解决方案
【5】php-rdkafka 扩展 常见问题
【6】宝塔PHP安装amqp扩展 完全符合目前的服务器环境 亲测可用