消息队列案例分析

需求:要做一个用户注册功能,需要在用户注册成功后给用户发一封成功邮件。

  • 方案一:提供一个注册接口,保存用户信息,同时发起邮件调用,待邮件发送成功后,返回用户操作成功。
  • 存在的问题1:运营反馈注册操作响应太慢,已经有好多用户流失了。
  • 方案二:原先的以单线程同步阻塞的方式进行邮件发送,确实存在问题。这次,使用JAVA多线程的特性,另起线程进行邮件发送,主线程直接返回保存结果。
  • 存在的问题2:注册操作响应是快多了。但是又有新的问题了,有用户反应,邮件收不到。能否在发送邮件时,保存一下发送的结果,对于发送失败的,进行补发。
  • 方案三:使用已有邮件服务(提供了一个类似邮局信箱的东西,你往这信箱里写上你要发送的消息,以及约定的地址。之后你就不用再操心了,我们自然能从约定的地址中取得消息,进行邮件的相应操作);
  • 存在的问题3:不久的一天,你会发现所有业务都替换了邮件发送的方式,统一使用了消息队列来进行发送。这下仅仅一个邮件服务模块,难以承受业务方源源不断的消息, 大量的消息堆积在了队列中。
  • 最终方案:这就需要更多的消费者(邮件服务)来共同处理队列中的消息,即所谓的分布式消息处理。

消息队列最大的特点:
将同步操作转为异步处理,将多服务共同操作转为职责单一的单服务操作,做到了服务间的解耦

  • 异步性
    将耗时的同步操作,通过以发送消息的方式,进行了异步化处理。减少了同步等待的时间。
  • 松耦合
    消息队列减少了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用关心彼此的实现细节,只要定义好消息的格式就行。
  • 分布式
    通过对消费者的横向扩展,降低了消息队列阻塞的风险,以及单个消费者产生单点故障的可能性(当然消息队列本身也可以做成分布式集群)。
  • 可靠性
    消息队列一般会把接收到的消息存储到本地硬盘上(当消息被处理完之后,存储信息根据不同的消息队列实现,有可能将其删除),这样即使应用挂掉或者消息队列本身挂掉,消息也能够重新加载。

原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值