2020-03-09

消息队列能做什么

1.异步处理  

    用户使用信用卡支付时使用同步模式需要串行执行所有的服务,响应用户时间比较长,可以使用消息队列异步处理达到快速响应用户请求。

2.流量控制

 在网关和后端服务之间使用消息队列实现流量控制,在使用消息队列后请求流程变为:

    1.网关收到请求后把请求放到消息队列中。

    2.后端服务在消息队列中获取app,请求并处理然后返回结果。

消息超时可以直接丢弃消息。

这种设计的优点是:能根据下游的处理能力自动调节流量,达到“削峰填谷”的作用。但这样做同样是有代价的:

    1.上下游服务需要改变为异步交互方式复炸度较高。

    2.服务调用链路变长整体延时变长。


令牌桶方案:

    在单位时间生成一定数量的令牌,后端服务处理请求前获取令牌,如果没有获取到令牌则拒绝请求。这样就保证了单位时间内单位时间内处理的请求不会超过令牌数量,达到流量控制的效果。

    可以简单的使用一个固定容量队列加令牌生成器服务实现,令牌生成器匀速生成令牌加入到队列中,如果令牌队列满了就丢弃令牌。网关调用后端服务前,获取令牌,调用后端服务,如果获取不到令牌则直接返回失败。

3.服务解耦

    如电商的订单系统,很多下游服务需要实时订单信息,这些下游系统随着需求的变化不断的新增变化,每新增或变化需要修改订单系统,对核心订单系统来说是不可接受的。所以我们可以把订单系统生成的订单放入消息队列,下游系统需要订单数据可以订阅消息队列,实现服务间解耦。

以上就是消息队列经常使用的三个场景,当然还有其他的使用场景。

    1.作为发布 / 订阅系统实现一个微服务级系统间的观察者模式。

    2.连接流计算任务和数据。

    3.用于将消息广播给大量接收者。 

等等其他一些场景。

使用消息队列也带来了一些其他问题:

    1.使用消息队列带来的延时问题

    2.增加了系统复炸性

    3.数据的一致性

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • RabbitMQ 安装(linux): 1.安装Erlang------------...
    灯等登凳阅读 2,538评论 0 1
  • 交易分析 交易分析交易概况(自然天、自然月、自定义) 总成交金额: 统计时间内,所有付款订单金额之和(包含采购单金...
    YF_杰阅读 233评论 0 0
  • 一天两只小猴子看见了一棵桃树哦,他们都流口水了。就想摘桃子吃,可中间有一条河怎么过去呢,两只小猴子想呀想,其中一只...
    yoyo621阅读 458评论 0 0
  • 经历了二个多月的暑假生活,今天又回归到一人一狗的安静日子,说心里话,感觉有点不适应了…… 没有开灯...
    情深一寸痛多一分阅读 190评论 0 0
  • 初秋的皇城飘来一丝凉意,我紧了紧夜行衣,观察着街上熙攘的人群。 如今的皇城已然是一座开放包容的大城市,三教九流都可...
    捭阖仙人阅读 398评论 2 5