面试网> 面试题库 > IT面试题 > 技术干货:ActiveMQ面试题及答案

技术干货:ActiveMQ面试题及答案

面试网2020/1/17 10:52:480人围观
简介1、什么是 ActiveMQ? activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。2、Active...

1、什么是 ActiveMQ?

    activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。

2、Activemq的瓶颈值

    根据网上一般评测文档上来看,每秒的消息吞吐在2000以上, acticemq也可以集群化部署,也是使用zookeeper来搭建。

3、ActiveMQ服务器宕机怎么办?

    这得从ActiveMQ的储存机制说起。在通常的情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的,它们的最大限制在配置文件的<systemUsage>节点中配置。

    但是,在非持久化消息堆积到一定程度,内存告急的时候,ActiveMQ会将内存中的非持久化消息写入临时文件中,以腾出内存。虽然都保存到了文件里,但它和持久化消息的区别是,重启后持久化消息会从文件中恢复,非持久化的临时文件会直接删除。

    那如果文件增大到达了配置中的最大限制的时候会发生什么?我做了以下实验:

    设置2G左右的持久化文件限制,大量生产持久化消息直到文件达到最大限制,此时生产者阻塞,但消费者可正常连接并消费消息,等消息消费掉一部分,文件删除又腾出空间之后,生产者又可继续发送消息,服务自动恢复正常。

    设置2G左右的临时文件限制,大量生产非持久化消息并写入临时文件,在达到最大限制时,生产者阻塞,消费者可正常连接但不能消费消息,或者原本慢速消费的消费者,消费突然停止。整个系统可连接,但是无法提供服务,就这样挂了。

    具体原因不详,解决方案:尽量不要用非持久化消息,非要用的话,将临时文件限制尽可能的调大。

4、AcitveMQ的作用、原理?(生产者、消费者。p2p、订阅实现流程)

    Activemq的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信,如果使用Activemq的话可以对系统之间的调用进行解耦,实现系统间的异步通信。原理就是生产者生产消息,把消息发送给activemq。Activemq接收到消息,然后查看有多少个消费者,然后把消息转发给消费者,此过程中生产者无需参与。消费者接收到消息后做相应的处理和生产者没有任何关系

5、activemq在项目中如何应用的

    Activemq在项目中主要是完成系统之间通信,并且将系统之间的调用进行解耦。例如在添加、修改商品信息后,需要将商品信息同步到索引库、同步缓存中的数据以及生成静态页面一系列操作。

    在此场景下就可以使用activemq。一旦后台对商品信息进行修改后,就向activemq发送一条消息,然后通过activemq将消息发送给消息的消费端,消费端接收到消息可以进行相应的业务处理

7、rabbitmq如何实现集群高可用?

    集群是保证服务可靠性的一种方式,同时可以通过水平扩展以提升消息吞吐能力。RabbitMQ是用分布式程序设计语言erlang开发的,所以天生就支持集群。接下来,将介绍RabbitMQ分布式消息处理方式、集群模式、节点类型,并动手搭建一个高可用集群环境,最后通过java程序来验证集群的高可用性。

    RabbitMQ分布式的消息处理方式有以下三种:

    (1)Clustering:不支持跨网段,各节点需运行同版本的Erlang和RabbitMQ应用于同网段局域网。

    (2)Federation:允许单台服务器上的Exchange或Queue接收发布到另一台服务器上Exchange或Queue的消息,应用于广域网。

    (3)Shovel:与Federation类似,但工作在更低层次。

    RabbitMQ对网络延迟很敏感,在LAN环境建议使用clustering方式;在WAN环境中,则使用Federation或Shovel。我们平时说的RabbitMQ集群,说的就是clustering方式,它是RabbitMQ内嵌的一种消息处理方式,而Federation或Shovel则是以plugin形式存在。

8、丢消息怎么办?

    这得从java的java.net.SocketException异常说起。简单点说就是当网络发送方发送一堆数据,然后调用close关闭连接之后。这些发送的数据都在接收者的缓存里,接收者如果调用read方法仍旧能从缓存中读取这些数据,尽管对方已经关闭了连接。

    但是当接收者尝试发送数据时,由于此时连接已关闭,所以会发生异常,这个很好理解。不过需要注意的是,当发生SocketException后,原本缓存区中数据也作废了,此时接收者再次调用read方法去读取缓存中的数据,就会报Software caused connection abort: recv failed错误。

    通过抓包得知,ActiveMQ会每隔10秒发送一个心跳包,这个心跳包是服务器发送给客户端的,用来判断客户端死没死。如果你看过上面第一条,就会知道非持久化消息堆积到一定程度会写到文件里,这个写的过程会阻塞所有动作,而且会持续20到30秒,并且随着内存的增大而增大。

    当客户端发完消息调用connection.close()时,会期待服务器对于关闭连接的回答,如果超过15秒没回答就直接调用socket层的close关闭tcp连接了。这时客户端发出的消息其实还在服务器的缓存里等待处理,不过由于服务器心跳包的设置,导致发生了java.net.SocketException异常,把缓存里的数据作废了,没处理的消息全部丢失。

    解决方案:用持久化消息,或者非持久化消息及时处理不要堆积,或者启动事务,启动事务后,commit()方法会负责任的等待服务器的返回,也就不会关闭连接导致消息丢失了。

最新信息

  • 技术干货:Hadoop面试题及答案

    一、什么是Hadoop? Hadoop是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop包括以下内容: HDF...

  • 技术干货:ActiveMQ面试题及答案

    1、什么是 ActiveMQ? activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。2、Active...

  • 技术干货:RabbitMQ面试题及答案

    RabbitMQ作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色,特别是在一些典型的应用场景以及业务模块中具有重要的作用。 比如业务服务模块解耦,异步通信,高并发限流...

  • 关于Tomcat的13道面试题,你能答对几个?

    Tomcat服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它早期...

  • 12道Zookeeper面试题,让你不再束手无策!

    ZooKeeper是一个开源的分布式协调服务,可以基于ZooKeeper实现诸如:数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护,名字服务、分布式同步、分布...

  • 技术干货:spring boot面试题及答案

    做Java开发,没有人敢小觑 Spring Boot的重要性,现在出去面试,无论多小的公司 or 项目,都要跟你扯一扯 Spring Boot,扯一扯微服务,不会?没用过?Sorry,我们不合适! ...

标签列表