面试题答案
一键面试基于消息属性分流
- 原理:在消息生产者发送消息时,为消息添加特定的属性,比如一个名为
grayFlag
的属性,值为true
或false
。消息队列在投递消息时,消费者可以根据这个属性来决定是否接收消息。灰度版本的消费者配置为只接收grayFlag
为true
的消息,而正式版本的消费者配置为接收grayFlag
为false
的消息。这样就可以实现按照消息属性将消息分流到不同版本的消费者。
基于消息标签分流
- 原理:消息队列一般支持为消息设置标签(Tag)。生产者在发送消息时,给灰度相关的消息设置一个特定的标签,如
grayTag
,给正式消息设置另一个标签,如prodTag
。消费者端配置监听不同的标签,灰度版本消费者监听grayTag
标签的消息,正式版本消费者监听prodTag
标签的消息,从而实现消息分流。
基于消息路由键分流(针对有路由功能的消息队列,如 RabbitMQ)
- 原理:在 RabbitMQ 中,生产者发送消息时会指定一个路由键(Routing Key)。可以约定特定的路由键用于灰度消息,例如
gray.#
(这里#
是通配符,代表匹配任意字符),其他路由键用于正式消息。通过交换机(Exchange)的绑定规则,将灰度消息路由到灰度版本消费者对应的队列,正式消息路由到正式版本消费者对应的队列。