RabbitMq
2021/10/19 23:11:53
本文主要是介绍RabbitMq,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
boot快速使用RabbitMq
pom.xml文件引入
<!--spring-boot对rabbitmq的支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
Base工作模式
-
生产者在配置类中声明队列
// 声明队列 @Bean public Queue baseQueue() { return new Queue("队列名称"); }
-
生产者发送消息
@Autowired private RabbitTemplate rabbitTemplate; public void sendMessage() { //base模式,rotingKey就是队列名称 Object代表消息 rabbitTemplate.convertAndSend(roteingKey, Object); }
-
消费者消费消息
@RabbitListener(queues = "队列名称") public void baseListener(Object obj){ }
# 总结 1. base模式是点对点消费,生产者将消息直接发送给队列(而非交换机) 2. 消费者通过监听队列来进行消费
Work工作模式
# 总结 1. work工作模式,配置类,生产者、消费者代码与base模式一致 2. 区别在于,work模型有多个消费者针对一个队列的消息进行消费,每个消费者每次消费的消息不一样,使用多个队列的目的是为了快速消费消息 3. work工作模式,可根据消费者性能设置消息的拉取速率(仅在手动签收模式下好用) spring: rabbitmq: listener: simple: acknowledge-mode: auto # 消费者消费消息,默认为自动签收 manual为手动签收 prefetch: 1 #配置拉去效率,数字越大效率越高
Fanout工作模式
-
配置类
// 1. 声明队列 // 2. 声明Fanout交换机 @Bean public Exchange fanoutExchange() { return new FanoutExchange("交换机名称"); } // 3. 声明队列与交换机的绑定关系 rotingKey为空 @Bean public Binding fanoutABinding(@Qualifier("fanoutQueueA") Queue queue, @Qualifier("fanoutExchange") Exchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("").noargs(); }
-
生产者代码
@Autowired private RabbitTemplate rabbitTemplate; public void sendMessage() { //fanout模式下,rotingKey为"" rabbitTemplate.convertAndSend("交换机","","消息"); }
# 总结 1. fanout模式下,rotingKey为"" 2. 消息监听与base\work模式一致 3. 生产者将消息发送给交换机
Direct工作模式
-
配置类
//1. 声明队列 //2. 声明Direct交换机 @Bean public Exchange directExchange() { return new DirectExchange(DIRECT_EXCHANGE_NAME); } //3. 声明队列与交换机的绑定关系 - 需要指定唯一的rotingKey @Bean public Binding directABinding(@Qualifier("directAQueue") Queue queue, @Qualifier("directExchange") Exchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("rotingKey").noargs(); }
-
生产者代码
@Autowired private RabbitTemplate rabbitTemplate; public void sendMessage() { //direct模式下,消息发送时,需要明确指定的rotingKey rabbitTemplate.convertAndSend("交换机","rotingKey","消息"); }
# 总结 1. direct模式,声明队列与交换机的绑定关系时,需要指定rotingKey,生产者发送消息时,需要明确指定该rotingKey 2. 生产者发送消息给交换机
Topic工作模式
-
配置类
//1. 声明队列 //2. 声明Topic交换机 @Bean public Exchange topicExchange() { return new TopicExchange(TOPIC_EXCHANGE_NAME); } //3. 声明绑定关系
# 总结 1. topic模式是在direct模式的基础上增加了多级匹配 *:匹配一级 #:匹配多级 2. 生产者发送消息给交换机 3. 声明队列、交换机、以及他们之间的绑定方式一样,需要注意的是rotingKey 举个栗子: 声明绑定关系: 假设我们队列A在绑定交换机使用的rotingKey="topic.brave.*", 队列B在绑定交换机时使用的rotingKey="topic.#" 消费者发送消息: 向队列A发送消息时,rotingkey的形式只能限制为"topic.brave.*", * 可以代表任意 向队列B发送消息时,rotingKey的形式只需满足前缀"topic."就可以
这篇关于RabbitMq的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-27[开源] 一款轻量级的kafka可视化管理平台
- 2024-10-23Kafka消息丢失资料详解:初学者必看教程
- 2024-10-23Kafka资料新手入门指南
- 2024-10-23Kafka解耦入门:新手必读教程
- 2024-10-23Kafka入门:新手必读的简单教程
- 2024-10-23Kafka入门:新手必读的简单教程
- 2024-10-23Kafka消息丢失入门:新手必读指南
- 2024-10-23Kafka消息队列入门:新手必看的简单教程
- 2024-10-23Kafka消息队列入门与应用
- 2024-10-23Kafka重复消费入门:轻松掌握Kafka重复消息处理技巧