MQ的学习
目前流行的就是:activemq、ZeroMQ、RabbitMQ、kafka、rocketmq,学习RabbitMQ就可以了,这个就很强大。
rabbitMQ的优点(适用范围)
1. 基于erlang语言开发具有高可用高并发的优点,适合集群服务器。
2. 健壮、稳定、易用、跨平台、支持多种语言、文档齐全。
3. 有消息确认机制和持久化机制,可靠性高。
4. 开源
其他MQ的优势:
1. Apache ActiveMQ曝光率最高,但是可能会丢消息。
2. ZeroMQ延迟很低、支持灵活拓扑,但是不支持消息持久化和崩溃恢复。
1. 消息队列概述:
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。
把消息按照产生的次序加入队列,而由另外的处理程序/模块将其从队列中取出,并加以处理;从而形成了一个基本的消息队列。使用消息队列可以很好地将任务以异步的方式进行处理,或者进行数据传送和存储等。例如,当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢/较复杂的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理。
2. 常规的使用景::http://www.cnblogs.com/HigginCui/p/6478613.html#undefined
①.异步处理:用户注册后,需要发注册邮件和注册短信。传统的做法有两种 1.串行的方式;2.并行方式(一般是先发短信再发邮件,但是这里可以同时发)
②.应用解耦:在下单(下单和库存)时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦
③.流量削锋:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。a、可以控制活动的人数。b、可以缓解短时间内高流量压垮应用
④.日志处理:日志处理是指将消息队列用在日志处理中,日志采集客户端,负责日志数据采集,定时写受写入Kafka队列
⑤.JMS消息服务:JMS(Java Message Service,Java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。
3. 消息队列MQ的特性:
异步/顺序读写/高性能/协议简单。异步消息机制保证正确发送,不保证及时发送,短信就是这样
4. 消息队列MQ的好处:(https://www.oschina.net/translate/top-10-uses-for-message-queue)
① .解耦:消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
② 冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险
③ 扩展性:因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的;只要另外增加处理过程即可。不需要改变代码、不需要调节参数。扩展就像调大电力按钮一样简单。
④ 灵活性 & 峰值处理能力:使用消息队列能够使关键组件顶住增长的访问压力,而不是因为超出负荷的请求而完全崩溃。访问量一下剧增的时候,也可以处理。
⑤ 可恢复行:当体系的一部分组件失效,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
⑥ 送达保证:消息队列提供的冗余机制保证了消息能被实际的处理,只要一个进程读取了该队列即可
⑦ 排序保证:消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。FIFO(先进先出)的顺序来处理,因此消息在队列中的位置就是从队列中检索他们的位置。
⑧ 异步通信:很多时候,你不想也不需要立即处理消息。消息队列提供了异步处理机制,允许你把一个消息放入队列,但并不立即处理它。你想向队列中放入多少消息就放多少,然后在你乐意的时候再去处理它们。
5. ACtiveMQ主要解决什么问题:
在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
原文地址:http://blog.csdn.net/dly1580854879/article/details/68486367