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

消息序列化与格式专题

专题说明

本专题深入讲解 RabbitMQ 消息序列化机制、常用数据格式的对比与集成,掌握消息编码与解码的最佳实践。

学习目标

  1. 理解消息序列化的概念和 RabbitMQ 的字节传输机制
  2. 掌握 JSON、Protobuf、Avro 等常用格式的序列化方法
  3. 能够设计跨语言的消息格式和版本兼容策略

学习建议

建议通过多语言实例理解不同序列化格式的编解码过程。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(18 题)

1
判断题

在RabbitMQ中,消息的content_type属性是一个可选的元数据字段,不设置该属性不会影响消息的正常投递和消费。

A

B

2
单选题

在RabbitMQ Java客户端中发送JSON格式消息时,以下设置content_type的方式正确的是?

A

properties.setContentType("json")

B

properties.setContentType("application/json")

C

properties.setContentType("JSON")

D

properties.setContentType("text/json")

3
填空题

在RabbitMQ中,content_type用于标识消息体的MIME类型,而content_encoding用于标识消息体的________。当消息体使用GZIP压缩后以Base64编码传输时,content_encoding应设置为________

4
多选题

以下关于RabbitMQ消息content_type属性的描述,哪些是正确的?

A

content_type会影响Broker对消息的路由决策

B

消费者可以通过content_type自动选择合适的反序列化器

C

content_type的值必须是合法的MIME类型字符串

D

Spring AMQP中可以根据消息转换器自动设置content_type

5
判断题

在RabbitMQ中使用JSON作为消息体格式时,如果生产者和消费者使用不同的编程语言,只要都遵循相同的JSON Schema结构,就可以实现正确的序列化和反序列化。

A

B

6
单选题

在Spring AMQP中使用Jackson2JsonMessageConverter作为消息转换器,当消费者接收到一条content_typetext/plain的消息时,会发生什么情况?

A

正常将消息反序列化为Java对象

B

抛出异常,因为content_type不匹配

C

自动将消息按JSON格式解析,忽略content_type

D

消息被丢弃,不投递给消费者

7
填空题

在Java中使用JSON序列化RabbitMQ消息时,如果对象中存在________会导致StackOverflowError,此时可通过添加______来忽略该字段或使用@JsonIgnore排除。

8
多选题

以下关于RabbitMQ消息JSON序列化的描述,哪些是正确的?

A

JSON格式的消息体积通常比Protobuf大

B

JSON序列化后的消息体是UTF-8编码的文本

C

在JSON消息中可以安全地传输Java的Date对象

D

消费者端反序列化JSON时,字段顺序必须与生产者端完全一致

9
判断题

Protobuf消息在RabbitMQ中传输时,由于采用二进制编码格式,消费者无需知道.proto文件定义即可正确反序列化消息。

A

B

10
单选题

在RabbitMQ中使用Protobuf作为消息序列化格式时,以下哪项不是Protobuf相比JSON的优势?

A

消息体积更小,减少网络传输开销

B

序列化和反序列化速度更快,CPU开销更低

C

可读性更好,便于日志排查和问题调试

D

支持向后兼容,新增字段不会破坏老版本消费者

11
填空题

Protobuf中字段的数据类型______使用可变长度编码,数值越小占用字节越少。而Protobuf通过________而非字段名来标识每个字段,这使得在消息结构演进时具有天然的兼容性。

12
多选题

在RabbitMQ中使用Protobuf序列化消息时,以下哪些做法是正确的?

A

在消息的BasicProperties中设置content_type为application/x-protobuf

B

频繁修改.proto文件中的字段编号以优化结构

C

对已废弃的字段编号使用reserved关键字防止复用

D

将repeated字段用于列表类型数据,其编码效率优于JSON数组

13
单选题

当RabbitMQ消息的Protobuf结构发生变更(新增字段)时,以下哪种消费者行为是正确的?

A

老版本消费者抛出UnknownFieldException异常

B

老版本消费者忽略新字段,正常解析已知字段

C

新版本消费者无法解析老生产者发送的消息

D

Broker会拒绝序列化格式不匹配的消息投递

14
判断题

RabbitMQ单条消息的大小没有硬性上限,可以无限制地发送超大消息,只要生产者和消费者内存足够即可。

A

B

15
单选题

在RabbitMQ中处理超大消息时,以下哪种策略是最推荐的?

A

调大frame_max参数,允许直接传输超大消息

B

将消息体存储到对象存储中,仅在RabbitMQ中传递引用URL

C

将大消息拆分为多条独立消息,消费者端不做任何关联

D

关闭Broker的内存限制,让消息无限制堆积

16
填空题

消息分片传输方案中,生产者需要将大消息拆分为多个片段,每个片段携带________________两个关键元数据,消费者端通过聚合器按序号重组完整消息。

17
多选题

在RabbitMQ中处理大消息时,以下哪些方案可以有效降低传输风险?

A

使用GZIP或Snappy对消息体进行压缩后再发送

B

将消息分片并通过独立的队列发送,消费者端分别消费

C

直接以byte[]形式发送,依赖RabbitMQ自动处理大消息

D

在消息头中设置x-max-in-memory-size控制Broker内存使用

18
单选题

消息分片方案中,如果消费者端在重组大消息时发现某个分片丢失,以下最合理的处理方式是?

A

使用默认值填充缺失分片,继续处理消息

B

丢弃已收到的所有分片,等待生产者重发完整消息

C

将该消息标记为处理失败,移入死信队列等待人工介入

D

主动阻塞消费者线程,直到缺失分片到达

← 上一个专题 消息可靠性保障专题
下一个专题 → 消息确认机制基础专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库