热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Springboot2.3.7.RELEASE结合amqp实现RabbitMQ的direct模式(路由模式)

参考《SpringBoot实战派》消息队列RabbitMQ入门与5种模式详解(讲解了用户权限的问题,可以看一看)springboot(集成篇):RabbitMQ集成详解必看如果要发

参考

  1. 《Spring Boot实战派》
  2. 消息队列RabbitMQ入门与5种模式详解(讲解了用户权限的问题,可以看一看)
  3. springboot(集成篇):RabbitMQ集成详解

必看

  • 如果要发送对象,发送的对象需要继承 Serializable
  • 可以创建多个消费者,消息会均匀的分配给消费者
    Springboot 2.3.7.RELEASE 结合 amqp 实现 RabbitMQ 的 direct 模式(路由模式)
  • 任务失败后会自动重试,建议自己处理一下这方面的问题

建议

  • RabbitMQ 有多种模式及相关配置这里不再描述,建议搜索了解一下;本文只介绍 direct 模式的实现。
  • 关于Windows下的安装及开启web管理面板可以参考一下 【2021/11/28 基于RabbitMQ3.9.10】Windows安装RabbitMQ,并解决远程登录guest账号提示User can only log in via localhost 的问题

环境

  • Springboot 2.3.7.RELEASE
  • amqp(pom.xml内添加,未设置具体版本)
  • otp_win64_24.1.7(win安装文件)
  • rabbitmq-server-3.9.10(win安装文件)

正文

  1. pom.xml添加依赖

        
            org.springframework.boot
            spring-boot-starter-amqp
        

  1. 创建配置类、声明队列并绑定队列
/**
 * 配置mq交换器及声明队列
 * @Author 夏秋初
 * @Date 2021/11/27 19:48
 */
@Configuration
public class RabbitConfig {
    /**
     * 声明email队列
     * @return
     */
    @Bean
    public Queue userEmailVerify() {
        // true表示持久化该队列
        return new Queue("user.email.verify", true);
    }

//    /**
//     * 声明交互器 topic
//     * @return
//     */
//    @Bean
//    TopicExchange topicExchange() {
//        return new TopicExchange("topicExchange");
//    }
    /**
     * 声明交互器/交换机 direct
     * @return
     */
    @Bean
    DirectExchange directExchange() {
        return new DirectExchange("direct.exchange");
    }

    /**
     * 绑定email队列,并设置路由key,如果还有别的队列,再创建一个函数绑定即可
     * @return
     */
    @Bean
    public Binding bindingUserEmailVerify() {
        return BindingBuilder.bind(userEmailVerify()).to(directExchange()).with("user.email.verify");
    }
}
  1. 创建生产者(书上说可以发送对象,这边测试会报错不支持的格式,待文章写完后再解决)

/**
 * 发送者
 * @Author 夏秋初
 * @Date 2021/11/27 19:54
 */
@Component
public class UserEmailVerifyProducer {
    @Resource
    private AmqpTemplate amqpTemplate;
    /**
     * 发送邮件队列
     * @param userVerificationCodeEmailDto
     */
    public void sendEmail(UserEmailVerifyDto userVerificationCodeEmailDto){
        System.out.println("生产者 user.email.verify 发送消息: "+userVerificationCodeEmailDto);
        /**
         * 第一个参数指定交换机
         * 第二个参数指定队列
         * 第三个参数指定消息内容
         */
        amqpTemplate.convertAndSend("direct.exchange", "user.email.verify", userVerificationCodeEmailDto.toString());

    }
}

  1. 创建消费者
/**
 * 消费者
 * @Author 夏秋初
 * @Date 2021/11/27 20:23
 */
@Component
// 监听指定队列 
@RabbitListener(queues = "user.email.verify")
public class UserEmailVerifyConsumer {
    @RabbitHandler
    public void process(String content){
            System.out.println("消费者 user.email.verify  收到消息: "+content
        );
    }
}
  1. 用户实体
/**
 * @Author 夏秋初
 * @Date 2021/11/27 20:00
 */
@Data
public class UserEmailVerifyDto implements Serializable {
    private String email;
    private Integer code;
    private String cOntent= "您的邮箱验证码为:%d,请不要告诉别人哦";
}

  1. application.properties 配置文件内添加配置参数
# 如果访问局域网的mq服务,需要配置账户并允许远程访问 ,参考:https://www.cnblogs.com/xiaqiuchu/p/15616432.html
spring.rabbitmq.host=192.168.211.2
# 指定端口号
spring.rabbitmq.port=5672
# 指定账号,默认账号不可以在其他机器登录
spring.rabbitmq.username=testmail
# 指定密码
spring.rabbitmq.password=testmail

测试

  1. 运行本项目
  2. 访问控制台可以看到该交换机
    Springboot 2.3.7.RELEASE 结合 amqp 实现 RabbitMQ 的 direct 模式(路由模式)
  3. 点击进入交换机详情可以看到交换机内部的队列
    Springboot 2.3.7.RELEASE 结合 amqp 实现 RabbitMQ 的 direct 模式(路由模式)
  4. 测试发送消息显示消费者接受到
    Springboot 2.3.7.RELEASE 结合 amqp 实现 RabbitMQ 的 direct 模式(路由模式)

推荐阅读
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • java程序员_Java程序员最新职业规划,逆袭面经分享
    java程序员_Java程序员最新职业规划,逆袭面经分享 ... [详细]
  • Canvas漫游:碰撞检测与动画模拟
    探索Canvas在Web开发中的应用,通过碰撞检测与动画模拟提升交互体验。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 收割机|篇幅_国内最牛逼的笔记,不接受反驳!!
    收割机|篇幅_国内最牛逼的笔记,不接受反驳!! ... [详细]
  • Python包管理工具pip的使用指南
    本文详细介绍了如何使用pip进行Python包的安装、管理和常见问题的解决方法,特别针对国内用户提供了优化建议。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
author-avatar
Smitty
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有