全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 18 道配套习题

消息发送与接收专题

专题说明

本专题围绕 RabbitMQ 消息发送与接收的完整生命周期展开,涵盖连接管理、消息发布、消息消费、序列化格式、消息属性设置等 18 个核心知识点,帮助开发者构建稳定可靠的消息传递系统。

学习目标

  1. 掌握 RabbitMQ 连接创建与通道管理的最佳实践
  2. 理解消息发送与接收的完整流程及关键配置
  3. 能够正确处理消息序列化、属性设置和异常处理

学习建议

入门阶段建议先理解核心概念,再动手实践。

📝 配套习题(18 题)

💡 参考答案在文末
判断题
1

在使用RabbitMQ Java客户端时,ConnectionFactory的setPort()方法默认设置的端口号是5672。使用完Connection和Channel后,应该先关闭Channel再关闭Connection。

A

B

2

在RabbitMQ中,消息的持久化只需要设置消息的deliveryMode属性为2即可,与队列的durable属性无关。

A

B

3

在RabbitMQ中,消费者调用channel.basicConsume()方法后,会立即阻塞当前线程并等待消息到达。

A

B

4

在RabbitMQ中,生产者可以直接将消息发送到队列,而不需要经过交换机。

A

B

5

当RabbitMQ连接因认证失败(用户名或密码错误)而中断时,会抛出AuthenticationFailureException异常。在捕获到连接异常后,应该立即重试连接,而不需要任何延迟。

A

B

单选题
6

使用RabbitMQ Java客户端创建连接时,以下关于虚拟主机(Virtual Host)的描述错误的是?

A

虚拟主机用于实现多租户隔离

B

不同虚拟主机中可以存在同名的交换机和队列

C

创建ConnectionFactory时默认使用的虚拟主机是"/admin"

D

通过connectionFactory.setVirtualHost()方法可以设置虚拟主机

7

在创建RabbitMQ连接时,如果RabbitMQ服务器未启动或网络不可达,代码会抛出哪种异常?在实际开发中,应该使用什么结构来确保即使发生异常,已打开的资源也能被正确关闭?

A

IOException,使用try-with-resources结构

B

TimeoutException,使用try-finally结构

C

ConnectionException,使用try-catch结构

D

IOException或TimeoutException,使用try-with-resources或try-finally结构

8

在RabbitMQ中,生产者发送消息到指定交换机时,首先需要建立的底层连接对象是什么?

A

Channel

B

Connection

C

Queue

D

Exchange

9

消费者订阅队列时,如果将autoAck参数设置为true,意味着什么?

A

消息需要消费者手动确认后才能被删除

B

消息一旦被消费者接收就会自动从队列中删除

C

消息会被持久化保存,不会自动删除

D

消息只有在消费者断开连接后才会被删除

10

生产者使用channel.basicPublish()方法发送消息时,如果要将消息发送到名为"order_exchange"的交换机,并指定路由键为"order.create",以下哪个参数顺序是正确的?

A

basicPublish(exchange, routingKey, props, body)

B

basicPublish(routingKey, exchange, props, body)

C

basicPublish(exchange, body, routingKey, props)

D

basicPublish(props, exchange, routingKey, body)

11

消费者订阅队列并监听消息时,需要提供一个回调来处理接收到的消息,这个回调在RabbitMQ Java客户端中通常实现哪个接口?

A

MessageListener

B

DeliverCallback

C

ConsumerCallback

D

ReceiveHandler

12

在RabbitMQ中发送JSON格式的消息时,以下哪种方式正确地设置了消息属性和内容编码?

A

直接将JSON字符串转为字节数组发送,不设置任何属性

B

将JSON字符串转为UTF-8编码的字节数组,并设置contentType为"application/json"

C

将JSON字符串转为字节数组,设置contentType为"text/plain"

D

使用MessageProperties.PERSISTENT_TEXT_PLAIN作为属性,直接发送JSON字符串

多选题
13

使用RabbitMQ Java客户端创建ConnectionFactory时,以下哪些是必须或常用的配置参数?

A

setHost() - 设置RabbitMQ服务器地址

B

setPort() - 设置连接端口号

C

setUsername()和setPassword() - 设置认证凭据

D

setVirtualHost() - 设置虚拟主机

14

在RabbitMQ连接过程中,以下哪些情况会导致抛出IOException异常?

A

RabbitMQ服务器未启动,无法建立TCP连接

B

用户名或密码错误导致认证失败

C

指定的虚拟主机不存在

D

网络连接超时

15

RabbitMQ消息的BasicProperties可以设置以下哪些属性?

A

contentType - 消息内容类型

B

correlationId - 关联ID,用于请求-响应模式

C

expiration - 消息过期时间

D

priority - 消息优先级

填空题
16

在RabbitMQ Java客户端中,创建ConnectionFactory后,通过调用____________方法建立连接,该方法可能抛出________________________两种异常,连接使用完毕后应先关闭Channel再关闭Connection。

17

在Java中确保RabbitMQ资源被正确关闭,推荐使用____________语法,它会自动调用实现了____________接口的资源的____________方法;在finally块中关闭资源时,应先判断引用是否为null以避免NullPointerException。

18

在RabbitMQ Java客户端中,构建消息属性时使用____________模式,设置消息持久化的deliveryMode值为____________,设置消息内容类型为JSON时应设置contentType为____________,构建完成后调用build方法生成BasicProperties对象。

参考答案
1.A 2.错误 3.错误 4.错误 5.B 6.C 7.D 8.B 9.B 10.A 11.B 12.B 13.A;B;C;D 14.A;B;C 15.A;B;C;D 16.newConnection;IOException;TimeoutException 17.try-with-resources;AutoCloseable;close 18.BasicProperties.Builder;2;application/json
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 死信队列与延迟队列专题
下一个专题 → 消息可靠性保障专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码