mq使用的心得

背景
传统的同步请求(比如restful)虽然实现起来比较简单,但是随着请求线程数和存取数据量的增加,其局限性日益突显。典型的代表在于执行比较耗时的代码(例如导入大批量数据到数据库里)和非主业务(如埋点统计、记录登录日志、发送手机短信)的崩溃造成整个业务的崩溃(503错误)。同时一旦远程服务器宕机,造成消息数据丢失的问题。这个是笔者在前面公司工作遇上的问题,留下了惨痛的教训。
为解决此类问题,需要采取异步的方法来另外开启线程执行比较耗时和非主要的线程。首先想到的是以线程池为代表的多线程,该方法是使用@Async注解来标记在需要异步执行的方法上,但是因为在同一个机器上运行异步代码进而随着线程数过多导致cpu飙升的问题,故通常用于项目比较小的时候。而在项目比较庞大的时候,需要把异步的代码另外开一个服务器来执行,因此,消息中间件(MQ)诞生了。
简介
消息中间件(MQ)是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。故使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性,通过队列存储缓存来实现。
组成和原理
MQ整体是由生产者(Producer)、消费者(Consumer)、服务端(Server或broker)三个部分组成。生产者通过投递消息到服务端,接着服务端把消息推送给消费者进行消费,每个消息采用了传统的队列出入模式先进先出原则。同时为了防止消息的丢失,mq服务端采用了确认机制、缓存消息到磁盘这两种方式,同时还设定了主动推送和拉取机制,也就是一旦与消费者连接后,主动把消息发送给消费者,从而确保消息能够及时消费。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值