论文课程网站 建设背景,沈阳个人网站制作,网站开发软件和工具ide和编辑器,小程序开发制作服务商★1.如何保证消息的幂等性#xff1f;#xff08;如何避免消息重复投递#xff09;
生产端: 在消息发送前#xff0c;先查询数据库此消息是否被处理过。处理过则忽略、否则继续处理#xff0c;并在处理完成后修改状态为已处理。 消费端: 每个消息都生成全局唯一ID或业务I…★1.如何保证消息的幂等性如何避免消息重复投递
生产端: 在消息发送前先查询数据库此消息是否被处理过。处理过则忽略、否则继续处理并在处理完成后修改状态为已处理。 消费端: 每个消息都生成全局唯一ID或业务IDBizID以确保能识别重复的消息。 2.消息基于什么传输
RabbitMQ是基于信道Channel的方式进行数据传输的几乎所有的RabbitMQAPI调用都必须通过Channel对象来实现是客户端与RabbitMQ通信的基本单位。信道是建立在真实TCP中的虚拟连接每条TCP连接上的信道数量基本没有限制。 3.如何保证消息的有序性
如果想保证消息的有序性就需要保证生产端和消费端都有序。RabbitMQ生产端只需要发送消息就可以了消息会按顺序发送但如果有多个消费者轮询机制下虽然消费者虽然获取消息时是有序的但每个消费者处理消息的速度是不一样的就会导致去执行时无序所以要保证一个生产者一个队列一个消费者。 4.使用RabbitMQ有什么好处 削峰把消息放进RabbitMQ能减轻系统压力避免因高压而崩溃 异步允许将消息发放到队列然后执行其他任务后续由其他服务来异步处理这些任务 解耦生产者和消费者独立运作增强灵活性和可扩展性 可靠性提供持久化确认机制和事务处理确保消息的可靠性和完整性 5.Rabbitmq的手动ACK和自动ACK 自动ACK消息一旦被接收不论是否成功处理消费者自动执行发送ACK 手动ACK消息被接收后不会自动发送ACK,消费者需要手动调用ACK 6.消息怎么路由
路由 直连模式通过routing key去寻找绑定的对应队列 广播模式无视routing key将消息发送到所有绑定的队列上 主题模式可以使用统配符表示bingKey’*表示匹配一个单词 #则表示匹配没有或者多个单词。由此可以实现一个queue接收多个路由的消息。 7.如何解决死循环
①死信队列消息无法成功处理时将消息发到死信队列中避免无休止的循环重试。
②重试机制在消费者设置最大重试次数超过最大次数直接发到死信队列中。
③设置TTL给消息设置最大生存时间超过这个时间的消息发到死信队列。