RocketMQ系列(一)基本概念

RocketMQ是阿里出品的一款开源的消息中间件,让其声名大噪的就是它的事务消息的功能。在企业中,消息中间件选择使用RocketMQ的还是挺多的,这一系列的文章都是针对RocketMQ的,咱们先从RocketMQ的一些基本概念和环境的搭建开始聊起。RocketMQ由4部分组成,分别是:

  • 名称服务(Name Server)
  • 消息队列(Brokers)
  • 生产者(producer)
  • 消费者(consumer)

这4部分都可以进行水平扩展,从而避免单点故障,如下图:这是RocketMQ官网上的一张图,非常清晰的列出了4个部分,并且都是集群模式。下面我们就分别说一说这4部分。

名称服务(NameServer)

Name Server扮演的角色是一个注册中心,和Zookeeper的作用差不多。它的主要功能有两个,如下:1、broker的管理:broker集群将自己的信息注册到NameServer,NameServer提供心跳机制检测每一个broker是否正常。2、路由管理:每一个NameServer都有整个broker集群和队列的信息,以便客户端(生产者和消费者)查询。NameServer协调着分布式系统中的每一个组件,并且管理着每一个Topic的路由信息。

Broker

Broker主要是存储消息,并且提供Topic的机制。它提供推和拉两种模式,还有一些容灾的措施,比如可以配置消息副本。下面我们看一看Brokcer的主从机制。Broker的角色分为“异步主”、“同步主”和“从”三个角色。如果你不能容忍消息的丢失,你可以配置一个“同步主”和“从”两个Broker,如果你觉得消息丢失也无所谓,只要队列可用就ok的话,你可以配置“异步主”和“从”两个broker。如果你只是想简单的搭建,只配置一个“异步主”,不配置“从”也是可以的。上面提到的是broker之间的备份,broker里的信息也是可以保存到磁盘的,保存到磁盘的方式也有两种,推荐的方式是异步保存磁盘,同步保存磁盘是非常损耗性能的。

生产者

生产者支持集群部署,它们向broker集群发送消息,而且支持多种负载均衡的方式。

当生产者向broker发送消息时,会得到发送结果,发送结果中有一个发送状态。假设我们的配置中,消息的配置isWaitStoreMsgOK = true,这个配置默认也是true,如果你配置为false,在发送消息的过程中,只要不发生异常,发送结果都是SEND_OK。当isWaitStoreMsgOK = true,发送结果有以下几种:

1、FLUSH_DISK_TIMEOUT:保存磁盘超时,当保存磁盘的方式设置为SYNC_FLUSH(同步),并且在syncFlushTimeout配置的时间内(默认5s),没有完成保存磁盘的动作,将会得到这个状态。

2、FLUSH_SLAVE_TIMEOUT:同步“从”超时,当broker的角色设置为“同步主”时,但是在设置的同步时间内,默认为5s,没有完成主从之间的同步,就会得到这个状态。

3、SLAVE_NOT_AVAILABLE:“从”不可用,当我们设置“同步主”,但是没有配置“从”broker时,会返回这个状态。

4、SEND_OK:消息发送成功。

再来看看消息重复与消息丢失,当你发现你的消息丢失时,通常有两个选择,一个是丢就丢吧,这样消息就真的丢了;另一个选择是消息重新发送,这样有可能引起消息重复。通常情况下,还是推荐重新发送的,我们在消费消息的时候要去除掉重复的消息。

发送message的大小一般不超过512k,默认的发送消息的方式是同步的,发送方法会一直阻塞,直到等到返回的响应。如果你比较在意性能,也可以用send(msg, callback)异步的方式发送消息。

消费者

多个消费者可以组成消费者组(consumer group),不同的消费者组可以订阅相同的Topic,也可以独立的消费Topic,每一个消费者组都有自己的消费偏移量。

消息的消费方式一般有两种,顺序消费和并发消费。

1、顺序消费:消费者将锁住消息队列,确保消息按照顺序一个一个的被消费掉,顺序消费会引起一部分性能损失。在消费消息的时候,如果出现异常,不建议直接抛出,而是应该返回SUSPEND_CURRENT_QUEUE_A_MOMENT这个状态,它将告诉消费者过一段时间后,会重新消费这个消息。

2、并发消费:消费者将并发的消费消息,这种方式的性能非常好,也是推荐的消费方式。在消费的过程中,如果出现异常,不建议直接抛出,而是返回RECONSUME_LATER状态,它告诉消费者现在不能正确的消费它,过一段时间后,会再次消费它。

在消费者内部,是使用ThreadPoolExecutor作为线程池的,我们可以通过setConsumeThreadMin和setConsumeThreadMax设置最小消费线程和最大消费线程。

当一个新的消费者组建立以后,它要决定是否消费之前的历史消息,CONSUME_FROM_LAST_OFFSET将忽略历史消息,消费新的消息。CONSUME_FROM_FIRST_OFFSET将消费队列中的每一个消息,之前的历史消息也会再消费一遍。CONSUME_FROM_TIMESTAMP可以指定消费消息的时间,指定时间以后的消息会被消费。

如果你的应用不能容忍重复消费,那么在消费消息的过程中,要做好消息的校验。往期精选架构前的环境准备,看这篇就够了!资深架构师:详解GEO位置搜索!尤雨溪:Vue3的设计过程

rocketmq同步发送超时时间_RocketMQ系列(一)基本概念相关推荐

  1. Ajax同步设置超时时间出错逻辑解决方案

    惯性思维害死人啊,都让我感觉老了都,哎 写功能时有几个ajax进行数据获取,需要同步获取数据,比如1ajax请求会超时需要判定请求失败,然后给数据给2去ajax请求,惯性思维 要同步 但是几番挣扎之后 ...

  2. ajax同步请求 超时时间问题

    最近做到一个功能,从别的连接跳转登录到我们系统后台,登录后会查询一些数据.一开始登录用的异步调用,领导看日志发现还没登录就调了好几个查询接口,要改.我想简单点就改成同步不就行了,然后上同步,恩,好多了 ...

  3. rockemq 发送延迟消息_RocketMQ系列(五)广播与延迟消息

    今天要给大家介绍RocketMQ中的两个功能,一个是"广播",这个功能是比较基础的,几乎所有的mq产品都是支持这个功能的:另外一个是"延迟消费",这个应该算是R ...

  4. mq发送消息到两个服务器问题,RocketMQ消息发送常见错误与解决方案

    本文将结合本身使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题.解决问题.web 一.No route info of this topic 没法找到路由信息,其 ...

  5. RocketMQ消息发送常见错误与解决方案

    本文将结合自己使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题.解决问题. 1.No route info of this topic 无法找到路由信息,其完整的 ...

  6. RocketMQ同步消息、异步消息、单向消息详解

    一.RocketMQ 支持 3 种消息发送方式 : 1.同步消息(sync message ) producer向 broker 发送消息,执行 API 时同步等待, 直到broker 服务器返回发送 ...

  7. 使用setsockopt()接口,设置TCP的接收与发送超时,Invalid argument错误问题

    使用TCP套接字时,当无网络连接时,还会继续send,继续recv阻塞,知道TCP自己协议机制判断断开连接时才会停止发送和接收,时间需要几分钟之久. 解决的办法是,自己设置接收超时时间,当超时后重新发 ...

  8. httpwebrequest超时时间timeout设置无效_【SpringBoot WEB 系列】RestTemplate 之超时设置...

    [SpringBoot WEB 系列]RestTemplate 之超时设置 一般来讲我们访问外部资源时,需要做一个保护,比如最常见的添加一个超时设置,避免一直被阻塞,RestTemplate 可以通过 ...

  9. (十一)jmeter接口自动化难点系列---设置响应超时时间

    在做jmeter接口测试的时候,有时服务器问题,导致我们的接口一直在请求,而无法得到返回. 所以我们需要用到jmeter的一个功能响应超时自动停止请求. 在jmeter中, 有一项设置名称为timeo ...

最新文章

  1. [Java]学习Java(4)类、接口、语句
  2. JavaScript学习笔记 - 入门篇(1)- 准备
  3. 各种排序总结(一)直接插入排序
  4. tomcat占用cpu比较多
  5. AIX性能管理指南-luoqiangb@dc
  6. 如何处理Angular应用的错误消息: No pipe found with name async
  7. html画布 缩放的正方形,html5-canvas – 在动画HTML5画布中缩放和平移
  8. 深入理解K8S网络原理下
  9. 传媒业进入B2C领域:香港商报推爱购商城
  10. Windows系列服务器上配置JSP运行环境,以及网站上线
  11. java jsonobject_Java调用groovy及如何使用springBean
  12. 不得不学的统计学基础知识(一)
  13. keil安装、注册及pack包安装
  14. excel宏选中单元格_从单元格引用运行Excel宏
  15. Python数据分析-二手车数据用于机器学习二手车价格预测
  16. 解决nginx启动时域名解析失败而导致服务启动失败的问题【proxy_pass后面的域名进行DNS解析,解析失败则无法启动nginx】
  17. 使用Win10 Hyper-V 创建虚拟机
  18. threejs 实现小飞机建模
  19. 紫薯第10章数学 kaungbin专题14数论基础
  20. java网络编程实现一个聊天程序

热门文章

  1. R语言描述性统计分析:相关性分析
  2. 密度聚类算法DBSCAN实战及可视化分析
  3. NLP命名实体识别NER数据准备及模型训练实例
  4. 深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战
  5. Mysql中having和where的区别
  6. 三代测序原理与数据文件简介(SMRT+Nanopore)
  7. 【ES6】数组的拓展
  8. 目标检测 RCNN, SPPNet, Fast RCNN, Faster RCNN 总结
  9. vmware 报错解决:The system cannot find the path specified.
  10. pip(pip3)安装依赖库失败