本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!