- 问:什么是RabbitMQ?
- 问:RabbitMQ是如何工作的,它是标准消息流吗?
- 问:何时以及为何使用RabbitMQ?
- 问:如何将RabbitMQ与Java集成?
- 问:什么是绑定和路由密钥?
- 问:什么是RabbitMQ频道?
- 问:rabbitmq中的死信队列是什么?
- 问:如何在本地安装和配置RabbitMQ?
- 问:什么是交易所?
- 问:交易所类型?
- 问:RabbitMQ使用哪种协议?
- 问:如何将RabbitMQ与Spring Coud Stream集成?
- 问:什么是RabbitMQ Vhost?
- 问:RabbitMQ与ActiveMQ有何不同?
- 问:RabbitMQ是否支持MQTT(消息队列遥测传输)?
- 问:RabbitMQ是否持久?
- 问:RabbitMQ使用数据库吗?
- 问:RabbitMQ是推还是拉?
- 问:Rabbitmq中的死信交换是什么?
- 问:什么是pub sub,它是如何工作的?
- 问:RabbitMQ是ESB吗?
- 问:RabbitMQ使用哪种设计模式。
- 问:如何监视rabbitMQ队列。
- 问:什么是同步和异步消息传递?
- 问:RabbitMq中正在使用哪些消息传递模式?
- 问:什么是点对点沟通?
- 问:RabbitMQ与Kafka有何不同?
- 问:什么是Pub Sub Communication?
- 问:什么是请求-响应通信?
- 问:什么是Erlang RabbitMQ?
- 问:RabbitMQ是否支持消息优先级队列?
问:什么是RabbitMQ?
答:
RabbitMQ也被称为消息排队技术或消息代理。这是一个开源消息代理。简单地说:它是确定队列以及连接消息或消息的应用程序的程序。消息中可以提供任何种类的信息。
问:RabbitMQ是如何工作的,它是标准消息流吗?
答:
交易所必须接受来自供应商请求的消息,并使用标头属性,绑定和路由键将它们路由到消息队列。建立绑定以将队列连接到交换机。如上面的屏幕截图所示,下面是“标准”消息流。
1)生产者向交易所发布消息。创建交换时,必须指定交换的类型。稍后将详细说明不同类型的交换。
2)交换机收到消息,现在负责消息的路由。交换根据交换类型考虑不同的消息属性,例如路由密钥。
3)必须从交换到队列创建绑定。在这种情况下,我们从交换中看到两个绑定到两个不同的队列。Exchange根据邮件属性将邮件路由到队列中。
4)消息保留在队列中,直到由使用者处理为止。
5)使用者处理消息。
问:何时以及为何使用RabbitMQ?
答:
当您要交换消息以供消耗或具有多个收件人的工作人员之间的负载平衡时,消息队列很有用。当生产者在队列中时,用户能够从队列中获取消息并开始处理。使用者可以与发布者位于不同的服务器或同一台服务器上。所请求的应用程序可以是一种语言,而使用者应用程序可以是另一种语言-消息代理不会关心应用程序语言,它只是在使用者和接收者之间发送消息。这也减少了应用程序之间的依赖关系或耦合。
问:如何将RabbitMQ与Java集成?
答:
问:什么是绑定和路由密钥?
答:
绑定是您设置的用于将队列连接到交换机的“桥”。
路由密钥是属性消息,交换机在确定如何将消息路由到队列时会对其进行检查。
问:什么是RabbitMQ频道?
答:
它们使您可以与RabbiMQ服务器建立单一连接,但是对于应用程序的不同部分,它们具有沙盒通信。 通道是RabbitMQ服务器与应用程序通信的方式。每个客户端进程拥有一个连接(实例),并且该进程(实例)中拥有多个通道
问:rabbitmq中的死信队列是什么?
答:
通常,死亡信队列(DLQ),也称为未传递消息队列,是由于某种原因而无法发送到目的地的消息的保留队列。
在rabbitmq中,死信队列是服务实现,用于存储满足以下一个或多个以下失败条件的消息。
- 发送到不存在的队列的消息。
- 超过队列长度限制。
- 超出消息长度限制。
- 消息被另一个队列交换拒绝。
- 消息达到阈值读取计数器数,因为它没有被使用。有时,这称为“退出队列”。
问:如何在本地安装和配置RabbitMQ?
答:
问:什么是交易所?
答:
消息不直接发布在队列中;用户将消息发送到交换机。交换机负责将消息路由到各个队列。交换从生产者请求接收消息,并通过绑定和路由键将消息路由到消息队列。绑定是交换和队列之间的链接。
问:交易所类型?
答:
直接:直接交换根据消息路由密钥将消息传输到队列。消息通过直接交换路由到绑定键与消息的路由键完全匹配的队列。如果将队列绑定到绑定密钥交换,则将使用路由到队列的路由消息向交换发送。
扇出:扇出将消息发送到与其链接的所有队列。
主题:主题交换将路由密钥和绑定路由模式之间的通配符匹配。
标头:标头交换使用消息标头的路由属性。
问:RabbitMQ使用哪种协议?
答:
RabbitMQ使用高级消息队列协议(AMQP)。它是一个开放的标准层,用于通过字节流在网络上传递日期。
问:如何将RabbitMQ与Spring Coud Stream集成?
答:
带有Spring Cloud Stream的RabbitMQ
问:什么是RabbitMQ Vhost?
答:
一个虚拟主机(又名“虚拟主机”)在AMQP是对象,如交易所,队列和绑定一个命名空间。RabbitMQ通过有效地使虚拟主机成为代理之上的“虚拟集群”,从而利用虚拟主机的更具体实现。
问:RabbitMQ与ActiveMQ有何不同?
答:
RabbitMQ是开源消息代理,支持以Erlang编写的多种协议。而ActiveMQ还是开源的,支持以Java语言编写的多种协议。
问:RabbitMQ是否支持MQTT(消息队列遥测传输)?
答:
RabbitMQ通过核心发行版附带的插件支持MQTT 3.1.1。
支持的MQTT功能:
- QoS0和QoS1发布和使用
- QoS2发布(降级为QoS1)
- TLS
- 会话粘性
- 带有可插拔存储后端的保留消息
- 遗嘱(LWT)
问:RabbitMQ是否持久?
答:
使队列具有持久性与使持久性消息不同。消息可以通过制作模式分发到持久性或临时性。发布消息时,如果希望在重新启动期间将其保留在持久队列中,则需要将传递模式设置为持久模式。
问:RabbitMQ使用数据库吗?
答:
RabbitMQ有意不将消息存储在数据库中。RabbitMQ通过以下两种方式将消息写入磁盘:
- 以delivery_mode = 2发布的邮件
- 内存压力导致RabbitMQ用完RAM,并将消息传输到磁盘以释放RAM。
问:RabbitMQ是推还是拉?
答:
RabbitMQ使用PUSH模板,并防止通过预取配置的限制耗尽用户。卡夫卡(Kafka)使用PULL,消费者在其中请求来自特定偏移批次的消息。
问:Rabbitmq中的死信交换是什么?
答:
如果没有适当的消息队列,该消息将被静默丢弃。RabbitMQ提供了称为“死信交换”的AMQP扩展。死信交换提供了用于收集不可传递消息的功能。
问:什么是pub sub,它是如何工作的?
答:
发布/订阅消息传递是异步的服务到服务通信,它是一种双向通信。
主要用于状态,微服务。在这种类型的模型中,一旦消息发布到某个主题,该主题的所有订阅者都会立即收到该消息。
问:RabbitMQ是ESB吗?
答:
RabbitMQ是消息传递代理,而Mule是ESB(企业服务总线)。ESB在消息代理之上包括其他层,例如路由,转换和业务流程管理
问:RabbitMQ使用哪种设计模式。
答:
作为一种强大的消息传递模型,在通信通道中的端点之间传输消息具有许多功能/用途。它使用异步体系结构模式来分离应用程序。
问:如何监视rabbitMQ队列。
答:
监视是使用运行状况检查和指标来捕获应用程序行为的过程。
有许多工具可用于监视应用程序,例如AppDynamics,DataDog,AWS CloudWatch等。
问:什么是同步和异步消息传递。
答:
同步消息传递是一种双向通信,其中发送方向接收方发送消息,接收方接收消息并向发送方回复。其中“异步消息传递”是一种通信,其中消息放置在消息队列中,不需要接收者的立即响应。
问:RabbitMq中正在使用哪些消息传递模式?
答:
消息传递模式是在RabbitMQ中基于交换队列和绑定实现的。我们可能会区分实现RabbitMQ设计模式的不同方法:点对点通信,发布,订阅,请求,响应通信
问:什么是点对点沟通?
答:
点对点连接是两个通信端点/节点之间的通信连接。
问:RabbitMQ与Kafka有何不同?
答:
RabbitMQ是用于在消费者和生产者之间传递消息的轻量级消息代理,它支持许多协议,例如AMQP,MQTT,STOMP。Kafka只需很少的开销即可管理大量数据,而Kafka则是为存储和分发大量消息而设计的。
问:什么是Pub Sub Communication?
答:
发布/订阅消息传递是异步用户和服务之间的双向通信,主要用于无状态微服务中。
问:什么是请求-响应通信?
答:
请求-响应或请求-答复是一种强消息传递模式,其中请求者将消息发送到答复者,而返回答复者将响应发送回答复者。
问:什么是Erlang RabbitMQ?
答:
RabbitMQ服务器软件是用Erlang的编程语言编写的,并且基于Open Telecom Framework的群集和故障转移体系结构。
问:RabbitMQ是否支持消息优先级队列?
答:
要使队列充当优先级队列,请 在建立队列时提供一个属性。 声明队列中的最大优先级数。 在JavAns中:设置以下优先级:x-max-priority
x-max-priority
Map<String, Object> queuePriorityProp = new HashMap<>();
queuePriorityProp.put("x-max-priority", 10); // max priority is 10
channel.queueDeclare(QUEUE_NAME, durable, false, false, queuePriorityProp);
发布特定优先级的消息,
String queueNote = "Set note priority 8";
AMQP.BasicProperties.Builder queueProps = new AMQP.BasicProperties.Builder();
queueProps.contentType("text/plain")
.priority(8);
channel.basicPublish("", QUEUE_NAME, queueProps.build(), queueNote.getBytes());