首页 > 其他分享 >RocketMQ之生产者(Producer)

RocketMQ之生产者(Producer)

时间:2024-03-19 10:59:55浏览次数:16  
标签:发送 Producer 生产者 重试 消息 Apache RocketMQ

1.生产者(Producer)

生产者是 Apache RocketMQ 系统中用来构建并传输消息到服务端的运行实体。生产者通常被集成在业务系统中,将业务消息按照要求封装成 Apache RocketMQ 的消息(Message)并发送至服务端

2.生产者的传输行为

传输行为描述
发送方式生产者可通过API接口设置消息发送的方式。Apache RocketMQ 支持同步传输和异步传输
批量发送生产者可通过API接口设置消息批量传输的方式。例如,批量发送的消息条数或消息大小
事务行为Apache RocketMQ 支持事务消息,对于事务消息需要生产者配合进行事务检查等行为保障事务的最终一致性

3.生产者和主题的关系

生产者和主题的关系为多对多关系,即同一个生产者可以向多个主题发送消息,同一个主题也可以接收多个生产者的消息

4.生产者的属性

(1)生产者客户端ID
生产者客户端的标识,用于区分不同的生产者。集群内全局唯一。客户端ID由Apache RocketMQ 的SDK自动生成,主要用于日志查看、问题定位等运维场景,不支持修改

(2)通信参数

参数是否必选作用
接入点信息连接服务端的接入地址,用于识别服务端集群
身份认证信息客户端用于身份验证的凭证信息。 仅在服务端开启身份识别和认证时需要传输
请求超时时间客户端网络请求调用的超时时间(默认值:3000ms)

(3)预绑定主题列表

主题列表:Apache RocketMQ 的生产者需要将消息发送到的目标主题列表

消息类型是否必须设置预绑定主题列表作用
事务消息是(需要和事务检查器一起配合使用)事务消息场景下,生产者在故障、重启恢复时,需要检查事务消息的主题中是否有未提交的事务消息。避免生产者发送新消息后,主题中的旧事务消息一直处于未提交状态,造成业务延迟
非事务消息否(建议设置)服务端会在生产者初始化时根据预绑定主题列表,检查目标主题的访问权限和合法性,而不需要等到应用启动后再检查。若未设置,或后续消息发送的目标主题动态变更, Apache RocketMQ 会对目标主题进行动态补充检验

(4)发送重试策略
Apache RocketMQ 客户端连接服务端发起消息发送请求时,可能会因为网络故障、服务异常等原因导致调用失败。为保证消息的可靠性, Apache RocketMQ 在客户端SDK中内置请求重试逻辑,尝试通过重试发送达到最终调用成功的效果。同步发送和异步发送模式均支持消息发送重试

1)重试机制触发条件
备注:对于事务消息,只会进行透明重试(transparent retries),网络超时或异常等场景不会进行重试

  • 客户端消息发送请求调用失败或请求超时
  • 网络异常造成连接失败或请求超时
  • Apache RocketMQ服务端节点处于重启或下线等状态造成连接失败
  • Apache RocketMQ服务端运行慢造成请求超时
  • Apache RocketMQ服务端返回失败错误码:系统逻辑错误(因运行逻辑不正确造成的错误)和系统流控错误(因容量超限造成的流控错误)

2)重试流程
生产者在初始化时设置消息发送最大重试次数,当出现上述触发条件的场景时,生产者客户端会按照设置的重试次数一直重试发送消息,直到消息发送成功或达到最大重试次数重试结束,并在最后一次重试失败后返回调用错误响应

  • 同步发送:调用线程会一直阻塞,直到某次重试成功或最终重试失败,抛出错误码和异常
  • 异步发送:调用线程不会阻塞,但调用结果会通过异常事件或者成功事件返回

3)重试间隔

  • 除服务端返回系统流控错误场景,其他触发条件触发重试后,均会立即进行重试,无等待间隔
  • 若由于服务端返回流控错误触发重试,系统会按照指数退避策略进行延迟重试。指数退避算法通过以下参数控制重试行为
参数描述
INITIAL_BACKOFF第一次失败重试前后需等待多久,默认值:1秒
MULTIPLIERMULTIPLIER指数退避因子,即退避倍率,默认值:1.6
JITTER随机抖动因子,默认值:0.2
MAX_BACKOFF等待间隔时间上限,默认值:120秒
MIN_CONNECT_TIMEOUT最短重试间隔,默认值:20秒

4)功能约束

  • 链路耗时阻塞评估:在重试流程中生产者仅能控制最大重试次数。若由于系统异常触发了SDK内置的重试逻辑,则服务端需要等待最终重试结果,可能会导致消息发送请求链路被阻塞。对于某些实时调用类场景,您需要合理评估每次调用请求的超时时间以及最大重试次数,避免影响全链路的耗时
  • 最终异常兜底: Apache RocketMQ 客户端内置的发送请求重试机制并不能保证消息发送一定成功。当最终重试仍然失败时,业务方调用需要捕获异常,并做好冗余保护处理,避免消息发送结果不一致
  • 消息重复问题:因远程调用的不确定性,当Apache RocketMQ客户端因请求超时触发消息发送重试流程,此时客户端无法感知服务端的处理结果,客户端进行的消息发送重试可能会产生消息重复问题,业务逻辑需要自行处理消息重复问题

5.生产者使用建议

(1)不建议单一进程创建大量生产者

Apache RocketMQ 的生产者和主题是多对多的关系,支持同一个生产者向多个主题发送消息。对于生产者的创建和初始化,建议遵循够用即可、最大化复用原则,如果有需要发送消息到多个主题的场景,无需为每个主题都创建一个生产者。

(2)不建议频繁创建和销毁生产者

Apache RocketMQ 的生产者是可以重复利用的底层资源,类似数据库的连接池。因此不需要在每次发送消息时动态创建生产者,且在发送结束后销毁生产者。这样频繁的创建销毁会在服务端产生大量短连接请求,严重影响系统性能。

标签:发送,Producer,生产者,重试,消息,Apache,RocketMQ
From: https://blog.csdn.net/Lyhdreamer/article/details/136829007

相关文章

  • springboot结合rocketmq的使用以及遇到的问题
    rocketmq是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列RocketMQ可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。首先需要下载安装rocketmq:1.官网 https://rocketmq.apache.org/zh/do......
  • RocketMQ - Broker启动的时候都做了什么?
    1.Broker启动的时候是如何初始化自己的核心配置的?启动Broker的时候也是通过mqbroker这种脚本来实现的,最终脚本里一定会启动一个JVM进程,开始执行一个mainclass的代码。实际上Broker的JVM进程启动之后,会执行BrokerStartup的main()方法,这个BrokerStartup类,就在rocketmq源码......
  • Python使用RocketMQ(消息队列)
    消息队列在日常开发中比较常用的开发中间件,每家大厂一般都会具有自己的消息队列服务器。本文主要讲述Python中如何使用RocketMQ的相关SDK。希望大家在阅读本文前可以先了解一下RocketMQ的基本知识。使用 pipinstallrocketmq-ihttps://pypi.tuna.tsinghua.edu.cn/sim......
  • 多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)
    设计模式是什么类似于棋谱一样的东西计算机圈子里的大佬为了能让小菜鸡的代码不要写的太差针对一些典型的场景,给出了一些典型的解决方案这样小菜鸡们可以根据这些方案(ACM里面叫板子,象棋五子棋里叫棋谱,咱这里叫设计模式),略加修改,这样代码再差也差不到哪里去......
  • Android14音频进阶:生产者与消费者模型(六十二)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • 爆款游戏如何借助 RocketMQ Serverless,打造流畅体验并节省 98% 成本?
    作者:鼎岳、稚柳、勇猛、家泽一款游戏作品之所以能在市场上引爆热潮,铸就爆款传奇,除了独树一帜的创新设计理念、引人入胜的故事情节和丰富多样的玩法机制之外,最核心的要素就是为玩家提供极致流畅且无与伦比的游戏体验。这种体验涵盖了从游戏载入速度、画面帧率稳定性、操作响应灵敏......
  • RocketMQ为什么这么快?我从源码中扒出了10大原因!
    大家好,我是三友~~RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快那么,问题来了,RocketMQ为什么这么快呢?接下来,我将从以下10个方面来探讨一下RocketMQ这么快的背后原因如果你对RocketMQ还不了解,可以从公众......
  • RocketMQ为什么这么快?我从源码中扒出了10个原因!
    大家好,我是三友~~RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快那么,问题来了,RocketMQ为什么这么快呢?接下来,我将从以下10个方面来探讨一下RocketMQ这么快的背后原因如果你对RocketMQ还不了解,可以从公众......
  • 基于RocketMQ实现分布式事务
    背景在一个微服务架构的项目中,一个业务操作可能涉及到多个服务,这些服务往往是独立部署,构成一个个独立的系统。这种分布式的系统架构往往面临着分布式事务的问题。为了保证系统数据的一致性,我们需要确保这些服务中的操作要么全部成功,要么全部失败。通过使用RocketMQ实现分布式事......
  • windows安装RocketMQ
    一、RocketMQ介绍1.开发指南:Gitee中文学习地址(https://www.processon.com/view/link/620c69d95653bb4ec5bb75cd#map)二、RocketMQ下载官方下载地址::https://rocketmq.apache.org/zh/download三、安装部署过程(带!为非必要操作)1.Java环境classpath.;%JAVA_HOME%\lib\dt.ja......