当前位置: 首页 > news >正文

南安市住房和城乡建设部网站无锡网站制作工作室

南安市住房和城乡建设部网站,无锡网站制作工作室,电子商务网站建设的风险分析,做网站用电脑自带的B站视频地址 文章目录 一、开始二、结果1、RocketMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程的关系 2、Kafka 消费关系图1-1、partitions和consumer的关系1-2、consumer 和线程的关系 3、RabbitMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程…B站视频地址 文章目录 一、开始二、结果1、RocketMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程的关系 2、Kafka 消费关系图1-1、partitions和consumer的关系1-2、consumer 和线程的关系 3、RabbitMQ 消费关系图1-1、queue和consumer的关系1-2、consumer 和线程的关系 4、总结 三、实践1、全局有序2、局部有序 一、开始 先来定义一下何为顺序消息比如有A、B两条消息消息处理的流程是 1、2、3 … 10只有当A消息执行10完毕后B消息才可以进行1流程。 注如果A执行到7B开始执行1这其实不一定是顺序消息因为各种原因最终可能导致B先执行完10。 目前比较流行的队列RocketMQ、RabbitMQ、Kafka RocketMQ 消息发送到 topic再到topic关联的 queueRabbitMQ 消息发送到 exchange再由exchange通过规则到 queueKafka 消息发送到 topic再到topic关联的 partitions partitions可以理解就是一个queue 基于消息队列的规则想要达到我们的目标就要求A、B两个消息先后发送到同一个 queue/partitions且只能有一个消费者且消费的时候必须是单线程非异步的才可满足。 二、结果 三种MQ都支持消息发送到指定的 queue/partition简单来说就是基于一个标识去计算看它应该落在哪个queue/partition同一批顺序消息的标识是一样的所以最终进入的queue/partition也是一致的。 进入 queue/partition 之后的消息都是顺序的它们是 FIFO的。 顺序消息的控制主要是在消费端那问题就变成了2个 queue/partition 和消费者之间是如何对应的消费者对同一个 queue/partition 的消息是多线程还是单线程 只有满足一个queue/partition 只能对应一个消费者一个消费者对于一个queue/partition 是单线程消费的才可以做到消费顺序。 注MQ有集群消费和广播消费顺序消费肯定是建立在集群消费模式下的。 最终结果RocketMQ和Kafka是支持顺序消息的RabbitMQ不支持顺序消息。 1、RocketMQ 消费关系图 1-1、queue和consumer的关系 从上面的图可以看到一个queue最多只能对一个 consumer如果某个 topic需要更大的并发那就需要那就增加 queue然后增加 consumer 1-2、consumer 和线程的关系 正常使用SpringBoot开发项目的时候都是引入 rocketmq-spring-boot-starter然后用 RocketMQMessageListener 来做消费处理所以下面图也是基于这个用法来画的 通过这个图可以看到使用 RocketMQMessageListener 做消费者的时候本质上消息是被多线程去消费了那就存在A、B消息的真正处理顺序不一致了。 RocketMQ的解决办法是当你设置消费为顺序消费的时候在消息处理的时候它会基于 queue加锁这样就只能单线程处理这个queue的消息了。 设置顺序消费的代码 RocketMQMessageListener(topic Topic1, consumerGroup springboot3_producer_group, consumeMode ConsumeMode.ORDERLY )2、Kafka 消费关系图 Kafka 里面没有queue的概念转而用partitions但其本质上queue和partitions是一样的就把它理解成一个queue完事 1-1、partitions和consumer的关系 partitions 和 consumer的关系和 RocketMQ的一模一样只是把queue改为partitions即可就不画了 1-2、consumer 和线程的关系 Kafa消费消息的时候是主动去拉拉到了就去消费消费完了再去拉。 拉和消费的线程是一个当自定义线程数大于 partitions 的时候没用这个没用的意思是 Kafka压根不会创建比分配给自己 partitions 数量更多的线程添加消费者的时候会自平衡这点所有的MQ都一样的默认如果没有给consumer设置线程数的话是单线程 Kafka的解决办法是每一个 partitions 最多只有一个线程来消费它单线程自然就是顺序消费的咯。 3、RabbitMQ 消费关系图 1-1、queue和consumer的关系 RabbitMQ新增了exchange交换机的概念所有的数据都是先发送到交换机再由exchange基于规则下发到具体的queue可以通过设置交换机的类型的让消息投递到一个或多个 queue广播消息可以设置exchange类型为fanout这样消息就会投递到所有与之绑定的queue前提是没有设置特殊的 routingkey集群消费可以设置多个 consumer去消费一个queue或一个消费者设置多线程去消费以此来增加消费速率 注RabbitMQ的queue和consumer是可以设置为多对多的关系 1-2、consumer 和线程的关系 RabbitMQ默认也是一个线程消费当开启了多个线程的时候消息最终顺序就可能不一致因为各个线程之间其实是相互独立的 4、总结 从上述结果来看其实三种队列都是支持顺序消息的前提消息都发送到一个 queue/partitions但支持的程度和结果不同 RocketMQ一个queue只能有一个consumer消费者是多线程的但开启顺序消费的时候会对 queue加锁从而保证顺序Kafka一个 partitions只能由一个consumer的一个线程去消费基于单线程就保证了顺序性RabbitMQqueue和consumer是多对多的consumer的多个线程是独立的要想保证顺序只能让一个queue只有一个consumer且consumer只有一个线程但这样做效率就很低 三、实践 1、全局有序 基于上述分析三种MQ都可以做到全局有序因为一旦要求全局有序消费者就必须是单线程消费。 2、局部有序 比如用户订单业务对于不同的用户它们的消费顺序可以不用关注但是对于同一个用户的消息必须是严格有序的简单的如先下单、再支付。 对于这种场景RabbitMQ基本上就不满足的它只有一个队列如果消费者是单线程的会阻塞其它的消息一定会造成消息积压。 RocketMQ和Kafka在发送消息的时候都可以指定一个queue/partitions发消息的时候指定一个key通过key的hash找一个queue相同的key得到的就是同一个queue。 RocketMQ 通过顺序消息对queue加锁变成单线程消费Kafka 的每一个partitions 就只有一个线程去消费 消息可能重复消费这个和顺序消息没关系所以在写消费逻辑的时候应该做幂等。
http://www.zqtcl.cn/news/950407/

相关文章:

  • 企业网站开发目的和意义住房和城乡建设厅官网查询
  • 直播一级a做爰片免费网站wordpress 模板 使用
  • 网站开发中期检查优质的菏泽网站建设
  • 建设网站号码在线html编辑
  • 品牌型网站制作有哪些公司石家庄广告制作公司
  • 做网站赚几百万网站效果图怎么做的
  • 哪些网站做企业招聘不要花钱wordpress底部导航代码
  • 怎么用链接进自己做的网站企业组织架构
  • 建设新网站征求意见网站设计佛山
  • 重庆建设造价工程信息网站东莞电商页面设计公司
  • 乔拓云智能建站官网登录入口怎么样做网站卖农产品
  • 怎么维护好网站网站的域名每年都要续费
  • 运动网站模板佛山三水区有没有网站建设公司
  • 申请微官网的网站国外域名注册商网站
  • 集团公司网站建设建设中学校园网站的来源
  • 产品展示网站含后台网站模板下载网站开发什么语言好
  • 做知乎网站的图片如何设计好网站
  • 广州企业网站推广织梦学校网站模板
  • 国内响应式网站案例深圳住房和城乡建设局网站
  • 网页制作网站首页中国建筑论坛网
  • 众创空间网站建设少年宫网站建设模块
  • 企业营销型网站的内容科技公司取名大全
  • 哈尔滨云建站模板投资公司的钱从哪里来
  • 海南做网站公司哪家好中国人做外贸生意的网站
  • 没有网站怎么做cpa成都百度推广公司地址
  • 龙湖地产 网站建设高端上海网站设计公司
  • 触屏手机网站模板装修设计软件排名
  • 怎么做盗文网站郑州建设教育培训中心
  • 网站安全解决方案嵌入式软件工程师培训
  • 怎么做一种网站为别人宣传网站界面切片做程序