一、简单模式:一个生产者,一个消费者
@GetMapping("/sendMessage")
public void sendMessage() {
//没有交换机,两个参数为routingKey和消息内容
rabbitTemplate.convertAndSend("test1_Queue","haha");
}
二、工作队列模式:一个生产者,多个消费者,消费者之间负载均衡
@GetMapping("/sendMessage")
public void sendMessage() {
//没有交换机,两个参数为routingKey和消息内容
rabbitTemplate.convertAndSend("test1_Queue","haha");
}
三、发布订阅模式:生产者把消息给交换机,交换机把消息推送给与它绑定的所有队列,消费者监听自己的队列
该模式下,队列和交换机之间的绑定无需routingKey。因为无需routingKey,所以不需要进行字符串匹配,效率最高
@GetMapping("/sendMessage")
public void sendMessage() {
rabbitTemplate.convertAndSend("fanout_Exchange","","lala");
}
四、路由模式:交换机与队列由routing key绑定,生产者发送消息时指定交换机和routing key,则对应的队列便会收到消息
因为需要进行字符串匹配,所以效率其次
@GetMapping("/sendMessage")
public void sendMessage() {
rabbitTemplate.convertAndSend("direct_Exchange","test1_Queue","lala");
}
五、主题模式(通配符模式):交换机与队列由routing key绑定,但routing key由通配符和具体的字符组成,生产者输入具体的字符,交换机根据routing key的规则模糊匹配到对应的队列,则对应的队列会收到消息
*代表多个单词,#代表一个单词
因为需要进行字符串模糊匹配,所以效率最低
/**
* 交换机与队列绑定
* @return
*/
@Bean
Binding truckHistoryBinding(){
return BindingBuilder.bind(test1Queue()).to(topicExchange()).with("*.test1.*");
}
@GetMapping("/sendMessage")
public void sendMessage() {
rabbitTemplate.convertAndSend("topic_Exchange","aa.test1.cc","lala");
}
六、rpc模式:
严格意义上来讲,不属于mq范畴,不做讨论