ps:个人见解,欢迎斧正
1:是什么
顾名思义,是一种消息的队列。字面上可以看出2种意思,a:存放的是消息;b:存放方式是队列。
a:存放的是消息说到底就是报文啊数据啊之类的。
b:存放方式是队列
遵循着先进先出的的原则。
很像工厂里的输送道。输送的带就是队列,输送的货物就是消息。2:为什么
mq有他自己的好处。a:削峰;b:解耦。
a:削峰
在高并发的情况下,请求很可能堵到一起,但是如果加入消息队列,就能让请求排队,异步处理。
b:解耦
消息队列又叫做消息中间件,是应用的桥梁与屏障。假设有两个在不同服务器上的应用A、B。A有功能下单入库,B有功能单子入库(之后需要根据单子购买)。 对于同一个订单,在A、B应用中有 时间的先后顺序,但是A在新增一条订单后,并不要求B立刻入库和处理。
当然,我们可以使用webservice进行开发,让B提供一个接口(保存订单),A应用在下单时,同步调用B应用接口,但是,这样A必须要有B的明确地址,耦合性较高。一旦B失败,A也要报错。如果A很快,B很慢,那么对于A端下单用户来说,下单时间=A下单时间+B入库时间,很不友好。
这时候,就可以使用mq了。添加一个消息服务器C。对于A来说,只要在下单时发送消息给C就好。对于B来说,也只要从C中获取消息就好。A和B都只要知道C的明确地址就好。对于A端用户来说,这时候的下单功能会快很多。
也不用担心B入库失败,因为mq的消息处理模式有两种:一种是接收方接收消息后,对应消息就会从消息队列中删除;另一种需要接收方进行确认,才会把对应消息从消息队列中删除,我们可以把接收方确认接收到消息放到业务代码之后,等业务代码执行无误后进行确认。
3:怎么用
其他博客有很多,这边就不贴代码了。比较全的有朱小杰的http://www.cnblogs.com/zhuxiaojie/p/5564187.html#autoid-6-0-0