linux消息队列空间性能优化,应用服务器性能优化 之 消息队列(MQ:Message Queue)...

本文介绍了消息队列的基本概念及其在高并发场景下缓解数据库压力的优势,同时探讨了异步写入可能导致的数据一致性问题及解决方案。文章还提到了Apache ActiveMQ作为JMS规范实现的实例,并列举了消息队列的典型应用场景,如邮件服务、短信服务等。此外,文章讨论了消息队列在项目中的具体实现方式,包括使用NoSQL数据库和各种消息队列产品。
摘要由CSDN通过智能技术生成

一,消息队列基本概念

借用百科的一句话:消息队列就是在消息的传输过程中,保存消息的容器。

0818b9ca8b590ca3270a3433284dd417.png

从图-1和图-2对比,可以很清晰的明白,消息队列服务器,是位于应用服务器和数据库服务器之间的一个服务器。消息队列服务器作为一个缓冲,接收应用服务器发送过来的数据库操作命令,然后按照自己的配置,依次发送给数据库服务器来执行。这种数据库执行的方式,我们称之为异步写入数据库。增加消息队列服务器有以下几点好处:

1,由于消息队列服务器的速度远远高于数据库服务器,所以能够快递处理并返回数据;

2,消息队列服务器具有更好的扩展性;

3,在高并发的情况下,延迟写入数据库,可以有效降低数据库的压力;

凡事都会有利有弊,消息队列也不例外。正所谓知己知彼,百战不怠,我们要想把消息队列用的炉火纯青,消息队列的“弊端”也要铭记于心:

1,由于消息队列是在写入消息队列服务器之后,马上返回给用户,此时数据并没有真正的写入到数据库,后续的数据库操作可能会执行失败,这显然是有问题的。我们一般的做法,是通过业务的手段来解决异步带来的不一致问题。比如我们可以稍微修改一下业务流程,在订单写入消息队列后,不立即返回订单生成成功,而是等待消息队列里的进程真正的执行完以后,再通知用户订单生成成功。

消息队列有特殊的应用场景,而作为我们程序猿或者架构师,就是要从中进行取舍,拿出一套权衡利弊之后的解决方案,解决项目中遇到的问题。

典型应用:活动期间,短时间内生成大批量的订单。如图-3

0818b9ca8b590ca3270a3433284dd417.png

消息队列的应用场景:邮件服务、短信服务、好友动态推送服务等。我们必须要明白一点:任何需要持久化的产品,磁盘IO都是一个逃不掉的限制。消息队列只是在时间上延长了持久化的时间。

二,消息队列的具体实现(消息队列在项目中的应用)

消息队列的实现方式有很多种,

1,借助nosql数据库或者Memcached实现消息队列;

2,HornetQ、Apache 的 ActiveMQ、Beansalkd、RabitMQ、IronMQ、Tibco EMS、IBM的MQSeries等等;

首先我们来看看:Apache ActiveMQ

Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件;由于ActiveMQ是一个纯java的,所以只要操作系统支援Java虚拟机(JVM),ActiveMQ便可运行。

说到这里,我们需要了解一下JMS与ActiveMQ的关系:

1,JMS,即Java Message Service ,也就是大名鼎鼎的java消息服务API,是一个规范;

2,ActiveMQ,是JMS规范的一种实现;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值