`
eric_weitm
  • 浏览: 233814 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

消息队列mq的3个使用场景

 
阅读更多

一、抵御流量洪峰,

  整体架构设计如下:

1、nginx+tomcat

2、tomcat controller取到请求后向rocketmq 发送一个msg,将msg id返回给app,同时在redis里缓存msg状态为init(设置定时时间,时间到后清除)

3、client(app/h5/小程序) 通过msg id,定时向server获取msg处理状态

(init时 画圈,没有时返回繁忙,fail时返回处理失败)

4、server向redis查询处理的结果,返回 init/null/fail等状态

 

------ 后台服务层

1、原来controller里面的逻辑,改为使用rocketmq的消息来驱动

2、processor(原来的controller里面的逻辑) 取出消息,rpc调用后台的服务,将结果设置到redis

 

区别:1、原来是流量直接打到tomcat,瞬间请求包太多时,会导致tomcat拒绝服务(外部看起来像是down了)

2、现在用rocketmq先缓存消息(至少百万级别,不放心可以使用集群),对于真正的服务处理而言是异步的。

processor可以自己控制消息消费的速度(并发程度),避免整个后台被撑爆

 

二、实现跨进程、跨数据库的一致性事物

0、msg中带有一个业务的msgId

1、本serv处理完后,保证消息发到rocketmq

2、每个serv进程(分布式)监听自己关心的消息,并消费消息(根据msgid 保证幂等性)

3、serv本地除了业务数据,也要记录消息的处理状态

4、这样正常情况下会执行到最后,出现异常时根据各个serv本地的状态人工补单

 

三、服务间异步调用

适用情况(10年前,mmo server就已经用这种方式保证扩展性和灵活性):

1、内部的服务非常多(拆的很细)

2、一个serv处理完后有很多的后续serv(甚至不知道有多少个)

 

实现方式:

1、定义全局消息,比如开始处理、检查完账户有效性、检查完资金、检查完基金状态、支付完成、发起退款、退款完成……

2、每个serv自己做完了,就发出对应的消息

3、后续的serv监听自己关心的消息

 

整个系统基于宏观的消息来异步组织

分享到:
评论

相关推荐

    消息队列.docx

    RabbitMQ相关面试知识,什么是消息队列RabbitMQ? RabbitMQ的使用场景: 如何保证消息队列的高可用?大量消息在MQ中积压解决

    高效部署分布式消息队列

    消息中间件主要是实现分布式系统中解耦、异步消息、流量销锋、日志处理等场景,后面我也会结合一些场景进行探讨。现在生产中用的最多的消息队列有Activemq,rabbitmq,kafka,rocketmq等。分布式消息队列学习必备

    RabbitMQ死信队列应用1

    1、什么是死信队列 2、死信队列应用场景 3、延迟消息概念 4、死信队列使用流程图 5、死信队列应用(管理控制台) 6、死信队列应用(Java代码)

    Windows服务器上MQ发送消息,通过springboot接收阿里云服务器上消息

    本项目开发前提是,在本地windows机器上搭建了MQ,并建立好...此处,模拟场景是,本地Windows机器放入测试消息后,在springboot项目中通过程序连接阿里云MQ并接收到消息。同一台机器同一个队列管理器上发送和接收消息

    MQ选型.pdf

    队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道。以管道的方式做消息传递。 场景: 1.其实我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提醒我们,让...

    一线大厂面试真题-谈谈你对MQ的理解精讲

    主要由三个部分组成 ,分别是生产者、消息服务端和消费者。 生产者(Producer) 是生产消息的一端,相当于消息的发起方,主要负责载业务信息的消息的创建。然后是消息服务端(Server),是处理消息的单元,本质就是...

    Python操作RabbitMQ服务器实现消息队列的路由功能

    Python使用Pika库(安装:sudo pip install pika)可以操作RabbitMQ消息队列服务器(安装:sudo apt-get install rabbitmq-server),这里我们来看一下MQ相关的路由功能。 路由键的实现 比如有一个需要给所有接收端...

    1mq上–面试题

    文章目录1 为什么使用消息队列啊1.1 解耦1.2 异步1.3削峰2 消息队列有什么优点和缺点啊?3 kafka、activemq、rabbitmq、rocketmq都有什么优点和缺点啊?4 如何保证消息队列的高可用啊?4.1rabbitmq有三种模式:单机...

    MQ(队列).emmx

    MQ中间件整理的思维导图,emmx格式,需要下载mindmaster自己行打开,各类中间件使用场景、功能对比等

    redfoxmq:基于 TCP 的 .NET 内存消息队列(已停产)

    RedFoxMQ 是一个使用简单 TCP 传输的 .NET 内存消息队列。 它相当轻量级,并提供对消息序列化/反序列化的完全控制。 性能非常好(在我的机器上,通过 TCP 的批量广播达到每秒 > 200 万(!)条消息)。 在 NuGet 上...

    利用Python操作消息队列RabbitMQ的方法教程

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送...

    比RabbitMQ性能更好的消息队列RocketMQ

    比RabbitMQ性能更好的消息队列RocketMQ RabbitMQ 由于持久化场景下的吞吐量只有2.6万 经过 RabbitMQ,Kafka 和 RocketMQ( ActiveMQ 性能较差,暂不考虑)的调研和分析后,我们发现 RocketMQ 比较适合

    SpringCloud(一).md

    1、消息队列:MQ, 生产者---->存放消息的容器---->消费者 2、应用的场景:业务间的解耦、异步处理、流量削峰 3、MQ的程序:与MQ的通信(5种) RPC:专门的框架(dubbo) - 简单队列:一个生产者 一个消费...

    DeFiBus=RPC+MQ,是基于开源消息中间件打造的安全可控的分布式金融级消息总线

    DeFiBus不仅提供了RPC同步调用,还提供了MQ的异步事件通知、事件组播和广播等常用服务调用和消息模式,同时增加了应用多中心多活、服务就近、灰度发布等分布式场景下的高可用能力。在对于机器故障的容错能力方面的...

    基于RabbitMQ消息队列的分布式事务解决方案

    介绍Rabbitmg用于解决分布式事务必须掌握的5个核心概念一款分布式消息中间件,基于erlang语言开发,具备语言级别的高并发处理能力。和Spring框架是同一家公司。...●基于可靠消息(MQ)的解决方案异步场景

    java开发oa系统源码下载-Spring-rabbitMQ:Spring整合消息队列RabbitMQ

    java开发oa系统源码下载 Spring-rabbitMQ 在业务逻辑的异步处理,系统...direct直连交换机通信模型,包括一个direct交换机,三个binding,两个队列,两个消费者监听器,消息只会被投入到routingkey一致的队列中 4.topic

    消息中间件加kibana的中文操作指南

    MQ消息队列 是企业级互联网架构核心产品,具备低延迟,高并发,高可用,高可靠,支撑万亿级数据洪峰的分布式消息中间件. Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。你用Kibana来搜索,查看,并...

    Java 工程师进阶知识完全扫盲.pdf

    消息队列面试场景 面试官:你好。 候选人:你好。 (面试官在你的简历上面看到了,呦,有个亮点,你在项目里用过 MQ ,比如说你用过 ActiveMQ ) 面试官:你在系统里用过消息队列吗?(面试官在随和的语气中展开了...

    fpml-poc:用于将消息队列中的 fpml 解析为 noSQL 数据库的 POC

    还有另一个我们可以用于 FpML 验证规则的免费组件 PoC 中使用的技术/组件: C24-iO开放版阿帕奇骆驼Apache 主动 MQ 蒙戈数据库场景我们正在使用 FpML Swap Trade Affirmation 消息。 我们使用了两个不同的 FpML ...

Global site tag (gtag.js) - Google Analytics