一、如何保证消息的顺序性?
1. 通过某种算法,将需要保持先后顺序的消息放到同⼀个消息队列中(kafka中就是partition,rabbitMq中就是queue)。然后只⽤⼀个消费者去消费该队列。
2. 可以在消息体内添加全局有序标识来实现。
二、使⽤RabbitMQ增加rest服务吞吐量
三、RabbitMQ交换器有哪些类型?
1. fanout交换器:它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中;
2. direct交换器:direct类型的交换器路由规则很简单,它会把消息路由到哪些BindingKey和RoutingKey完全匹配的队列中;
3. topic交换器:匹配规则⽐direct更灵活。
4. headers交换器:根据发送消息内容的headers属性进⾏匹配(由于性能很差,不实⽤)。常⽤的交换器主要分为以下三种:
1、direct:如果路由键完全匹配,消息就被投递到相应的队列
2、fanout:如果交换器收到消息,将会⼴播到所有绑定的队列上
3、topic:可以使来⾃不同源头的消息能够到达同⼀个队列。 使⽤topic交换器时,可以使⽤通配符,⽐如:“*” 匹配特定位置的任意⽂本, “.” 把路由键分为了⼏部分,“#” 匹配所有规则等。特别注意:发往topic交换器的消息不能随意的设置选择键(routing_key),必须是由"."隔开的⼀系列的标识符组成。
四、RabbitMQ如何保证数据⼀致性?
1. ⽣产者确认机制:消息持久化后异步回调通知⽣产者,保证消息已经发出去;
2. 消息持久化:设置消息持久化;
3. 消费者确认机制:消费者成功消费消息之后,⼿动确认,保证消息已经消费。
五、RabbitMQ消费者⾃动扩展数量
SimpleMessageListenerContainer可根据RabbitMQ消息堆积情况⾃动扩展消费者数量。
六、RabbitMQ结构
a. Broker:简单来说就是消息队列服务器实体。
b. Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
c. Queue:消息队列载体,每个消息都会被投⼊到⼀个或多个队列。
d. Binding:绑定,它的作⽤就是把exchange和queue按照路由规则绑定起来。
e. Routing Key:路由关键字,exchange根据这个关键字进⾏消息投递。
f. vhost:虚拟主机,⼀个broker⾥可以开设多个vhost,⽤作不同⽤户的权限分离。
g. producer:消息⽣产者,就是投递消息的程序。
h. consumer:消息消费者,就是接受消息的程序。
i. channel:消息通道,在客户端的每个连接⾥,可建⽴多个channel,每个channel代表⼀个会话任务。
七、rabbitmq队列与消费者的关系?
1. ⼀个队列可以绑定多个消费者;
2. 消息默认以循环的⽅式发送给消费者;
3. 消费者收到消息默认⾃动确认,也可以改成⼿动确认