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

标签: 消息队列 mq | 发表时间:2018-09-01 19:11 | 作者:eric_weitm
出处:http://www.iteye.com

一、抵御流量洪峰,

  整体架构设计如下:

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监听自己关心的消息

 

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



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [消息队列 mq] 推荐:

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

- - 互联网 - ITeye博客
2、tomcat controller取到请求后向rocketmq 发送一个msg,将msg id返回给app,同时在redis里缓存msg状态为init(设置定时时间,时间到后清除). 3、client(app/h5/小程序) 通过msg id,定时向server获取msg处理状态. (init时 画圈,没有时返回繁忙,fail时返回处理失败).

闲扯kafka mq

- - 开源软件 - ITeye博客
本文主要讲解关于kafka mq的设计思想及个人理解. 关于kafka的详细信息,大家可以参考官网的文献 http://kafka.apache.org/documentation.html这是一篇相当不错的文章,值得仔细研读. 第一个问题:消息队列(Message Queue)是干嘛用的. 首先,要对消息队列有一个基本的理解.

[MQ]关于ActiveMQ的配置

- - 企业架构 - ITeye博客
  目前常用的消息队列组建无非就是MSMQ和ActiveMQ,至于他们的异同,这里不想做过多的比较. 简单来说,MSMQ内置于微软操作系统之中,在部署上包含一个隐性条件:Server需要是微软操作系统. (对于这点我并去调研过MSMQ是否可以部署在非微软系统,比如:Linux,只是拍脑袋想了想,感觉上是不可以).

快速的消息队列 SquirrelMQ

- Le - 开源中国社区最新软件
SquirrelMQ是一个快速的消息队列.   SquirrelMQ VS Redis 入队列: SquirrelMQ:100万条数据,105S,内存使用84MB. Redis:100万条数据,156S,内存使用127MB.   出队列:   SquirrelMQ:100万条数据,230S. Redis:100万条数据,163S.

Feed消息队列架构分析

- - Tim[后端技术]
最近一两年,大部分系统的数据流由基于日志的离线处理方式转变成实时的流式处理方式,并逐渐形成几种通用的使用方式,以下介绍微博的消息队列体系. 当前的主要消息队列分成如图3部分. 1、feed信息流主流程处理,图中中间的流程,通过相关MQ worker将数据写入cache、Redis及MySQL,以便用户浏览信息流.

redis作为消息队列的使用

- - ITeye博客
在redis支持的数据结构中,有一个是集合list. 对List的操作常见的有lpush  lrange等. 在这种常见的操作时,我们是把集合当做典型意义上的‘集合’来使用的. 往往容易被忽视的是List作为“队列”的使用情况. 反编译redis的jar包,会发现:.  pop意为“弹”,是队列里的取出元素.

高可用消息队列框架ZBUS

- - 企业架构 - ITeye博客
我们在日常开发中可以需要用到消息队列 当然我们完全可以自己写一个生产者-消费者框架 但是高可用性、实时性已经大量数据堆积时候就显得问题捉襟见肘了下面推荐的框架在我时间项目中和测试中都是非常不错那么他是什么框架呢.    zbus git地址. http://git.oschina.net/rushmore/zbus ZBUS=MQ+RPC 服务总线 1)支持消息队列, 发布订阅, RPC, 交易系统队列适配 2)亿级消息堆积能力、支持HA高可用 3)无依赖单个Jar包 ~300K 4)丰富的API--JAVA/C/C++/C#/Python/Node.JS多语言接入,支持HTTP等协议长连接入.

[转]消息队列的两种模式

- -
Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. 点对点与发布订阅最初是由JMS定义的. 这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅).

消息队列设计精要

- - 美团点评技术团队
消息队列已经逐渐成为企业IT系统内部通信的核心手段. 它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一. 当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等.

深入浅出 消息队列 ActiveMQ

- - 编程语言 - ITeye博客
ActiveMQ 是Apache出品,最流行的、功能强大的. 即时通讯和集成模式的开源服务器. ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现. 提供客户端支持跨语言和协议,带有易于在充分支持JMS 1.1和1.4使用J2EE企业集成模式和许多先进的功能.