wu
2024-03-11 8a8a404516c6ab5a9b9012b148cbc83b78020a65
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.example.springboot.common;
 
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class RabbitConfig {
 
    // 定义交换机名称
    public static final String DIRECT_EXCHANGE_NAME = "direct.exchange";
    // 定义队列名称
    public static final String QUEUE_NAME = "canadames";
    // 定义路由键
    public static final String ROUTING_KEY = "message.routingKey";
    // 定义第二个队列名称
    public static final String SECOND_QUEUE_NAME = "anotherQueue";
    // 定义第二个路由键
    public static final String SECOND_ROUTING_KEY = "another.routingKey";
 
    // 定义交换机
 
   // 直连交换机(Direct Exchange):直连交换机是最简单的一种交换机类型。它根据消息的路由键(Routing Key)将消息发送到与之完全匹配的队列。
   // 主题交换机(Topic Exchange):主题交换机允许通过使用通配符的方式来进行消息的路由。它将消息根据匹配的规则(通配符)发送到一个或多个队列上
    //扇形交换机(Fanout Exchange):扇形交换机会将收到的所有消息广播到所有绑定的队列上。它忽略消息的路由键,只需将消息发送给所有绑定的队列。
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange(DIRECT_EXCHANGE_NAME);
    }
 
    // 定义队列
    @Bean
    public Queue queue() {
        return new Queue(QUEUE_NAME);
    }
 
    // 定义第二个队列
    @Bean
    public Queue secondQueue() {
        return new Queue(SECOND_QUEUE_NAME);
    }
 
//第二个参数表示队列是否为持久化的,如果你想要创建一个持久化的队列,可以将该参数设置为 true。
// 持久化队列可以在 RabbitMQ 服务器重启后继续存在,以防止消息丢失。
    //第三个参数 exclusive 设置为 false,表示队列非排他性;
    // 将第四个参数 autoDelete 设置为 false,表示队列不会自动删除;
    // 将第五个参数 arguments 设置为 null,表示不指定其他参数。
//    @Bean
//    public Queue queue() {
//        return new Queue(QUEUE_NAME, false, false, false, null);
//    }
 
    // 将队列绑定到交换机上,并指定路由键
    @Bean
    public Binding binding() {
        return BindingBuilder.bind(queue()).to(directExchange()).with(ROUTING_KEY);
    }
 
    // 将第二个队列绑定到交换机上,并指定第二个路由键
    @Bean
    public Binding secondBinding() {
        return BindingBuilder.bind(secondQueue()).to(directExchange()).with(SECOND_ROUTING_KEY);
    }
}