小飞知识库 | YeLu🤠MiLu🤪 小飞知识库 | YeLu🤠MiLu🤪
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YeLu

爱技术的YeLu🤠
  • 函数式编程
  • Spring
  • SpringMVC
  • SpringBoot
  • SpringCloud
  • Mybatis
  • JVM
  • JUC并发编程
  • 设计模式
  • 单元测试
  • Redis
  • RabbitMQ
  • mysql
  • oracle
  • linux
  • nginx
  • docker
  • elasticSearch
  • windows
  • 虚拟机
  • 监控系统
  • https
  • 内网穿透
  • 前端文章

    • JavaScript
  • 页面

    • HTML
    • CSS
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 版本管理

    • Git笔记
  • 项目构建

    • maven
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • JAR包相关
  • 关于
  • 收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • RabbitMQ

    • 介绍
    • 安装
    • 卸载
    • 基础使用

    • 高级使用

      • confirm机制
      • return机制
      • limit_requeue
      • ttl
      • 死信队列 [dead-letter]
      • 消息传输的一致性问题
      • Springboot整合RabbitMQ
        • 1、导包
        • 2、编写配置文件
        • 3、编写RabbitMQConfig文件
        • 4、编写 Manager
        • 5、编写Service
        • 6、编写Controller
  • 消息队列
  • RabbitMQ
  • 高级使用
YeLu🤠
2025-01-06
目录

Springboot整合RabbitMQ

参考demo:G:\学习资料\java\java学习文档\java技术文档\消息队列文档\rabbimitmq\cd-xufei-rabbiitmq-parent\cd-xufei-sprinboot-rabbitmq

# 1、导包

        <!--这个是rabbitMQ的这个使用的包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
1
2
3
4
5

# 2、编写配置文件

# rabbitmq
spring:
  rabbitmq:
    virtual-host: /
    host: 169.254.182.30
    port: 5672
    username: xff
    password: xff
    # return机制
    publisher-returns: true
    # confirm机制
    publisher-confirms: true
    listener:
      direct:
        # 设置手动应答
        acknowledge-mode: manual
    template:
      # 搭配 publisher-returns 使用 属于return机制
      # 当消息投递过程中不可达目的地时将消息返回给生产者的功能
      mandatory: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 3、编写RabbitMQConfig文件

查看示例
@SpringBootConfiguration
public class RabbitMQConfig {

    /**
     * 工作模型
     *
     * @return
     */
    @Bean
    public Queue queueWork() {
        return new Queue("sb.queueWork");
    }


    /**
     * 发布订阅模型
     */
    // 首先声明两个队列
    @Bean
    public Queue queueFanout1() {
        return new Queue("queueFanout1");
    }

    @Bean
    public Queue queueFanout2() {
        return new Queue("queueFanout2");
    }

    // 其次声明发布订阅模型的交换机
    @Bean
    public FanoutExchange fanoutExchange1() {
        return new FanoutExchange("fanoutExchange1");
    }

    // 然后绑定队列到交换机
    @Bean
    public Binding fanoutExchangeBind1(Queue queueFanout1, FanoutExchange fanoutExchange1) {
        return BindingBuilder.bind(queueFanout1).to(fanoutExchange1);
    }

    @Bean
    public Binding fanoutExchangeBind2(Queue queueFanout2, FanoutExchange fanoutExchange1) {
        return BindingBuilder.bind(queueFanout2).to(fanoutExchange1);
    }

    /**
     * 玩下主题模型
     */
    // 声明主题模式队列1
    @Bean
    public Queue queuetopic1() {
        return new Queue("queuetopic1");
    }

    // 声明主题模式队列2
    @Bean
    public Queue queuetopic2() {
        return new Queue("queuetopic2");
    }

    // 声明主题模型的交换机
    @Bean
    public TopicExchange topicExchange1() {
        return new TopicExchange("topicExchange1");
    }

    // 将队列绑定到交换机
    @Bean
    public Binding bindingTopicExchange1(Queue queuetopic1, TopicExchange topicExchange1) {
        // 模糊匹配是指 * 模糊匹配生产者的 key 比如生产者的key是 xf.c 那么消费者也能接收到消息
        return BindingBuilder.bind(queuetopic1).to(topicExchange1).with("xiaofeifei.*");
    }

    @Bean
    public Binding bindingTopicExchange2(Queue queuetopic2, TopicExchange topicExchange1) {
        return BindingBuilder.bind(queuetopic2).to(topicExchange1).with("xiaofeifei.*");
    }

}
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
68
69
70
71
72
73
74
75
76
77
78
79

# 4、编写 Manager

查看示例
@Component
public class RabbitMQManager {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 向队列模型中 发送数据
     *
     * @param queueName : 队列的名字
     * @param msg       :发送的数据
     */
    public void sendWork(String queueName, String msg) {
        rabbitTemplate.convertAndSend(queueName, msg);
    }

    /**
     * 向发布订阅模型发布消息
     *
     * @param exchangeName
     * @param msg
     */
    public void sendFanout(String exchangeName, String msg) {
        // 如果要实现 confirm 机制
        // rabbitTemplate.setMandatory(true);
        // rabbitTemplate.setConfirmCallback(new MyConfirmListener());//设置发送数据的监听

        // 设置的是 没有地方去的数据的监听 return 机制
        // rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
        //    @Override
        //    public void returnedMessage(Message message, int i, String s, String s1, String s2) {
        //
        //    }
        //});


        rabbitTemplate.convertSendAndReceive(exchangeName, "", msg);
    }

    /**
     * 向主题模型发布消息
     *
     * @param exchangeName
     * @param msg
     */
    public void sendTopic(String exchangeName, String msg, String routingKey) {
        rabbitTemplate.convertSendAndReceive(exchangeName, routingKey, msg);
    }

    class MyConfirmListener implements RabbitTemplate.ConfirmCallback {

        @Override
        public void confirm(CorrelationData correlationData, boolean b, String s) {

        }
    }
}
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

# 5、编写Service

查看示例
public interface IRabbitMQService {
    /**
     * 向队列模型中 发送数据
     *
     * @param queueName : 队列的名字
     * @param msg       :发送的数据
     */
    void sendWork(String queueName, String msg);

    /**
     * 向发布订阅模型发布消息
     *
     * @param exchangeName
     * @param msg
     */
    void sendFanout(String exchangeName, String msg);

    /**
     * 向主题模型发布消息
     *
     * @param exchangeName
     * @param msg
     */
    void sendTopic(String exchangeName, String msg, String routingKey);
}
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

# 6、编写Controller

查看示例
@RestController
public class RabbitMQController {

    @Autowired
    private IRabbitMQService rabbitMQService;

    /**
     * 玩下工作模型
     *
     * @return
     */
    @RequestMapping("/sendwork")
    public Object sendwork() {
        for (int i = 0; i < 10; i++) {
            rabbitMQService.sendWork("sb.queueWork", "这个是工作模型整合的测试的地方" + i);
        }
        return "数据发送成功";
    }

    /**
     * 玩下发布订阅模型
     *
     * @return
     */
    @RequestMapping("/sendFanout")
    public Object sendFanout() {
        for (int i = 0; i < 5; i++) {
            rabbitMQService.sendFanout("fanoutExchange1", "这个是发布订阅模型测试的地方" + i);
        }
        return "数据发送成功";
    }

    /**
     * 玩下主题模型
     *
     * @return
     */
    @RequestMapping("/sendTopic")
    public Object sendTopic() {
        for (int i = 0; i < 5; i++) {
            rabbitMQService.sendTopic("topicExchange1", "这个是主题模型测试的地方" + i, "xiaofeifei.aa");
        }
        return "数据发送成功";
    }

}
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
最近更新: 2025/01/07, 09:25:39
消息传输的一致性问题

← 消息传输的一致性问题

最近更新
01
服务端配置
07-30
02
frp 安装
07-30
03
Prometheus采集Springboot应用
02-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | YeLu🤠MiLu🤪 | MIT License 蜀ICP备2024116879号 | 川公网安备51012202001998号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
欢迎你,我的朋友
看板娘