RocketMQ核心概念(翻译)
根据上面的模型,我们可以深挖关于消息系统设计的一些主题:
- 消费组并发性
- 消费者热点问题
- 消费者负载均衡
- 消息路由
- 连接多路复用
- 金丝雀部署
生产者
生产者将业务应用产生的消息发送到broker。生产者提供多种发送模式:同步,异步和单向。
生产者群组
相同角色的多个生产者组合在一起。如果原始生产者事物之后崩溃,broker联系同一生产者组内的不同生产者实例提交或回滚事务。
注意
考虑到提供的生产者在发送消息方面足够强大,每个生产者组只允许一个生产者实例,以避免多余的生产者实例初始化。
消费者
消费者从brokers拉去消息和将它们给应用。从用户应用角度,提供了两种消费者:
pull消费者
pull消费者主动从broker获取消息。一旦批量的消息被取回,用户应用开始消费处理。
push消费者
另一方面,push消费组封装消息拉取,消费进度和维护其他内部工作,为最终用户留下回调接口,实现在消息到达时执行。
消费者群组
类似前面提到的生产者群组,同样角色的消费者组合在一起称为消费者群组。
消费者群组是一个很好的概念,在消息消费方面,达到负载均衡和容错是很容易的。
注意
消费者群组的消费者必须拥有相同的主题订阅。
主题
主题是生产者发送消息和消费者提取消息的一种分类。主题与生产者和消费者的关系很松散。更具体的说,一个主题可能那个有0,1或多个生产者向其发送信息;相反,一个消费组可以发送不同主题的消息。从消费者来看,一个主题可能被0,1或多个消费组群组订阅。类似,一个消费者群组可能订阅一个或多个主题,只要该组的实例一直保持它们的订阅。
消息
被投递的信息称为消息。一个消息必需有一个主题,它可以被理解为信件可以邮寄到的地址。一个消息也可以有可选的标签和额外的键值对。例如,你可以给消息设置一个业务键,并在broker上查找本消息来诊断开发中的问题。
消息队列
消息队列,主题被分为一个或多个子主题。
标签
标签,也可以称为子主题,为用户提供了更多的灵活性。来自于同一业务模型的不同用途的消息可以有相同的主题和不同的标签。标签对于保持代码清晰和连贯是非常有帮助的,并且标签同样可以促进RocketMQ提供的查询系统。
代理broker
Broker是RocketMQ系统非常重要的组件。它接收来自于生产者的消息,存储消息并准本处理来自消费者的pull请求。它同样存储与消息相关的元数据,包括消费组群组,消费进度偏移量和主题/队列信息。
name server
name server作为信息信息提供者。生产者/消费组客户端通过主题来发现相应的broker列表。
消息模型
- 集群
- 广播
消息顺序
使用DefaultMQPushConsumer时,你可以决定串行或并行消费消息。
串行
串行消费消息意味着,消息消费与生产者为每个消息队列发送的消息有相同的顺序。如果强制方案是处理顺序的全局性,请确保使用的主题只有一个消息队列。
警告:
如果指定串行消费,消息消费的最大并行数 就是消费者群组订阅消费队列的数量。
并行
并行消费消息时,消息消费的最大并行数只受限于每个消费者客户端指定的线程池。
警告:
此模式不保证消息的顺序。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
程序员编程必备名言佳句,提升装逼指数~
生命太短暂,不要去做一些根本没有人想要的东西。 ——Ash Maurya 如果你交给某人一个程序,你将折磨他一整天;如果你教某人如何编写程序,你将折磨他一辈子。 ——David Leinweber 软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软件过于复杂,没有明显的缺陷。 ——C.A.R. Hoare 软件开发往往是这样:最开始的 90% 代码占用了开始的 90% 的开发时间;剩下 10% 代码同样需要 90% 的开发时间。 ——Tom Cargill 当你试图解决一个你不理解的问题时,复杂化就产成了。 ——Andy Boothe 用几个小时来制定计划,可以节省几周的编程时间。 —— 匿名 调试一个初次见到的代码比重写代码要困难两倍。因此,按照定义,如果你写代码非常巧妙,那么没有人足够聪明来调试它。 —— Brian W. Kernighan 我不是一个伟大的程序员,我只是一个具有良好习惯的优秀程序员。 ——Kent Beck 你们中大多数人都熟悉程序员的美德,有三种:那就是懒惰、急躁和傲慢。 —— Larry Wall,Perl 語言发明人 靠代码行...
- 下一篇
11月1日云栖精选夜读 | 170道Java工程师面试题,你敢挑战吗?
1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f=3.4;是否正确? 5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 6、Java有没有goto? 7、int和Integer有什么区别? 8、&和&&的区别? 9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 热点热议 170道Java工程师面试题,你敢挑战吗? 作者:技术小能手发表在:Java程序员联盟 为什么很多开发游戏的程序员选择半路转行? 作者:技术小能手发表在:程序员互动联盟 中国AI之路:崛起中的80后 作者:技术小能手发表在:趣味科技v 知识整理 实战演练(二):运行20小时的报表SQL优化后秒出 作者:技术小能手发表在:老叶茶馆 一次MongoDB故障的复盘 作者:技术小能手发表在:Mongoing中文社区 创建最小的Go docker 镜像 作者:技术...
相关文章
文章评论
共有0条评论来说两句吧...