activemq⾯试总结:
activemq⾯试总结:
1.是什么:消息中间件。可以在分布式系统的不同服务之间进⾏消息的发送和接收。
activeMQ默认端⼝号:61616
2.它的出现解决了什么问题:可以让系统解耦
⽐如:使⽤消息中间件,某⼀个服务,可能依赖了其他好⼏个服务。⽐如课程⾥⾯的运营商后台依赖了4个服务,
那不⽤mq就和4个服务耦合,⽤了mq,就只和1个mq耦合。
3.ActiveMQ的特点如下:
完全⽀持JMS 1.1和J2EE 1.4规范(持久化,XA消息,事务)
⽀持多种传输协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
可插拔的体系结构,可以灵活制定,如:消息存储⽅式,安全管理等
很容易和Application Server集成使⽤
多种语⾔和协议编写客户端,如:Java,C,C++,C#,Ruby,Perl,Python,PHP
从设计上保证了⾼性能的集,客户端—服务器,点对点
可以很容易的和Spring结合使⽤
⽀持通过 JDBC 和 journal 提供⾼速的消息持久化
⽀持和Axis的整合
4.ActiveMQ消息发送失败:
ActiveMQ有两种通信⽅式,点到点形式和发布订阅模式。
如果是点到点模式的话,如果消息发送不成功,此消息默认会保存到ActiveMQ服务端直到有消费者将其消费,所以此消息是不会丢失的。
如果是发布订阅模式的通信⽅式,默认情况只通知⼀次,如果接受不到此消息就没有了,这种场景使⽤于对消息发送率要求不⾼的情况,
如果要求消息必须送达不可以丢失的话,需要配置持久订阅。每个订阅端定义⼀个id,在订阅是向ActiveMQ注册,
发布消息和接受消息时需要配置发送模式为持久化,此时如果客户端接受不到消息,消息会持久化到服务端,直到客户端正常接收后为⽌。
5.如何防⽌消息重复发送:
解决⽅法:增加消息状态表。
通俗来说就是⼀个账本,⽤来记录消息的处理状态,每次处理消息之前,都去状态表中查询⼀次,如果已经有相同的消息存在,
那么不处理,可以防⽌重复发送。
6.什么情况下才使⽤ActiveMQ:
多个项⽬之间集成:跨平台多语⾔多项⽬
优点:降低系统间模块的耦合度软件扩展性
7.丢消息怎么办:
解决⽅案:⽤持久化消息【可以使⽤对数据进⾏持久化JDBC,AMQ(⽇志⽂件),KahaDB和LevelDB】,
或者⾮持久化消息及时处理不要堆积,
或者启动事务,启动事务后,commit()⽅法会负责任的等待服务器的返回,也就不会关闭连接导致消息丢失了。
8.持久化消息⾮常慢:
默认的情况下,⾮持久化的消息是异步发送的,持久化的消息是同步发送的,遇到慢⼀点的硬盘,发送消息的速度是⽆法忍受的。
但是在开启事务的情况下,消息都是异步发送的,效率会有2个数量级的提升。所以在发送持久化消息时,请务必开启事务模式。
其实发送⾮持久化消息时也建议开启事务,因为根本不会影响性能
9.服务挂掉:
这得从ActiveMQ的储存机制说起。在通常的情况下,⾮持久化消息是存储在内存中的,持久化消息是存储在⽂件中的,
它们的最⼤限制在配置⽂件的<systemUsage>节点中配置。但是,在⾮持久化消息堆积到⼀定程度,内存告急的时候,
ActiveMQ会将内存中的⾮持久化消息写⼊临时⽂件中,以腾出内存。虽然都保存到了⽂件⾥,但它和持久化消息的区别是,
重启后持久化消息会从⽂件中恢复,⾮持久化的临时⽂件会直接删除
10.Queue和Topic的区别:
A.点对点(point-to-point,简称PTP)Queue消息传递模型:
在该消息传递模型下,⼀个消息⽣产者向消息服务器端⼀个特定的队列发送消息,⼀个消费者从该队列中读取消息。在这种模型下,
activemq启动报错消息⽣产者知道消息消费者的队列并直接将消息发送到消息消费者的队列。这种模型的特点是能够保证数据安全
B.发布/订阅(publish/subscribe,简称pub/sub)Topic消息传递模型:
在该消息传递模型下,⼀个消息发布者向⼀个特定的消息主题发布消息,0或多个对此消息主题感兴趣的并且处于活动状态的消息订阅者
或者建⽴了持久订阅的消息订阅者才可以接收到所发布的消息。可能造成数据丢失
11.ActiveMQ【JMS的同步与异步】发送消息的⽅式有哪些:
A.同步⽅式
两个通信应⽤服务之间必须要进⾏同步,两个服务之间必须都是正常运⾏的。发送程序和接收程序都必须⼀直处于运⾏状态,并且随时做好相互通信的准备。发送程序⾸先向接收程序发起⼀个请求,称之为发送消息,发送程序紧接着就会堵塞当前⾃⾝的进程,不与其他应⽤进⾏任何的通信以及交互,
等待接收程序的响应,待发送消息得到接收程序的返回消息之后会继续向下运⾏,进⾏下⼀步的业务处理。
b.异步⽅式
两个通信应⽤之间可以不⽤同时在线等待,任何⼀⽅只需各⾃处理⾃⼰的业务,⽐如发送⽅发送消息以后不⽤登录接收⽅的响应,可以接着处理其他的任务。也就是说发送⽅和接收⽅都是相互独⽴存在的,发送⽅只管⽅,接收⽅只能接收,⽆须去等待对⽅的响应。
Java中JMS就是典型的异步消息处理机制,JMS消息有两种类型:点对点、发布/订阅
 每天积累⼀点,总会变胖的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。