activemq理解

来源:互联网 发布:软件测试学徒 编辑:程序博客网 时间:2024/05/19 19:35

什么是activeMQ:

activeMQ是基于jms消息中间件的一个解决并发的开源框架.

首先消息队列就是一个处理两个系统间信息的容器,为了解决高并发情况下对数据库数据同步处理导致的
阻塞或消息堆积过多造成大量行锁表锁导致数据库宕机,
通过消息队列,可以异步的处理这一系列问题,缓解服务器压力
当然这些信息也是存储在内存之中,所以也需要对中间件服务器进行优化,首先activeMQ机制是当内存达到
3/5时就会自动防止服务器宕机进行保护机制,会将非持久化的数据写入临时文件来缓解内存,等服务器
恢复过后持久化数据会恢复到内存中,但是临时数据会直接删除,为了保证数据不被丢失,一般activeMQ
都采用的持久化存储保存,但是持久化消息发送时同步发送的,所以这里需要开启事物,来保证消息的异步
发送,还有就是不均匀消费,消费者获取数据的时候默认一次取1000条,这样会造成消费不均匀的现象,为了避免这种
现象,可以将它配置为一次取一条.

activeMQ的使用:主要解决高并发信息访问,导致短信发送造成的服务器性能影响

    生产者消费者的概念描述

    总结:
1. 使用Queue时,生产者只要将Message发送到MQ服务器端,消费者就可以进行消费,而无需生产者程序一直运行;
2. 消息是按照先入先出的顺序,一旦有消费者将Message消费,该Message就会从MQ服务器队列中删去;
3. 有文章说,“生产者”<-->"消费者"是一对一的关系,其实并不准确,从上面可以看出,一个生产者产生的消息,可以被
多个消费者进行消费,只不过多个消费者在消费消息时是竞争的关系,先得到的先消费,一旦消费完成,该消息就会出队列,
就不能被其他消费者再消费了,即“一次性消费”。

特点:
1.“离线一次性消费”;
离线:指生产者在发送消息时,不需要消费者在线,生产者只需要将消息发送到MQ队列中,消费者可以稍后上线取消息;
一次性消费:指消费者之间存在竞争关系,任何一个消费者将消息消费掉之后,其他消费者都不能再进行消费;
若是只有1个生产者和1个消费者,就是我们熟悉的“点对点”通信了;

类似场景对比:
类似送快递,快递员(producer)将快递(Message)放到指定地点(destination)后,就可以离开了,
拿快递的人(customer)在接收到通知后,到指定地点(destination)去取快递(Message)就可以了。
当然,取快递时可能要进行身份验证,这就涉及到创建连接(connection)时,需要指定用户名和密码了。
还有就是,实际生活中,当快递员把快递放好之后,照理说应该通知客户去哪里取快递,而ActiveMq帮我们
做好了一切,通知的工作Activemq会帮我们实现,而无需我们亲自编码通知消费者,生产者只需要将Message
放到Mq中即可,通知消费者的工作,mq会帮我们处理。


优点:

1、系统整合:同构/异构系统整合,分布式环境中

2、降低模块间耦合:比如AB两个系统,A性能瓶颈或宕机、

系统差不干扰B

3、实现异步:1.推消息2.削峰请求

4、数据同步:web应用->缓存,搜索,db


缺点:容易出现信息阻塞;\

activeMQ死信息列队是什么?
ActiveMQ.DLQ是死消息队列,
即一条消息再被重发了多次后(阀值)(默认为重发6次redeliveryCounter==6),将会被ActiveMQ移入“死信队列”。
开发人员可以在这个Queue中查看处理出错的消息,进行人工干预。
broker(经纪人),管理内存中的信息,可加大broker以防止内存占满
activeMQ丢失消息的解决方案?

首先像这种基于jms的mq框架有很多,rabbitMQ zeroMQ之类优秀的框架,而activeMQ之所以能存活下来
是因为他的稳定性:失败重连机制failover,持久化服务,容错机制,多种恢复机制
所以MQ是可以完成持久化操作的,将内存的信息持久化到磁盘中.