IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Springboot整合Rabbitmq(史上最详细) -> 正文阅读

[Java知识库]Springboot整合Rabbitmq(史上最详细)

前言

Rabbitmq简介这里就不多说了,安装可以见我另外一篇帖子使用Docker安装Rabbitmq,Springboot对Mq协议封装的比较好了,因此其实整合过程很简单,大家按步骤进行操作就可以完成快速整合。
文章末尾处提供了源代码地址,可以下载完整代码。

maven依赖

我这里放工程的完整依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>20.0</version>
        </dependency>

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>
配置文件

这里在Spring中配置Mq的地址及密码,这里没有设置vhost,是使用默认的,如果你们创建了则可以通过配置指定对应的vhost。

spring:
  #rabbitmq配置
  rabbitmq:
    username: admin
    password: 12345678Aa
    addresses: 127.0.0.1:5672
工程目录结构

目录结构仅供参考。这里做个简单说明:

  • base包中定义了交换机名称、队列名称、路由键名称。
  • config包中是用来绑定交换机和队列以及路由键。
  • mq包中是生产者和消费者。
  • vo包中放着mq的传输对象。
    在这里插入图片描述
功能类详解

QueueConfig中使用@Bean注解将对应的queue、exchange、binding等交给容器统一管理。

@Configuration
public class QueueConfig {
    
    @Bean
    public DirectExchange defaultExchange() {
        return new DirectExchange(ExchangeName.DEFAULT.name());
    }

    @Bean
    public DirectExchange notifyMsgDirectExchange() {
        return new DirectExchange(ExchangeName.NOTIFY_MSG.name());
    }

    @Bean
    public Queue notifyMsgQueue() {
        return new Queue(QueueNames.NOTIFY_MSG_QUEUE, true);
    }


    @Bean
    public Binding notifyMsgQueueBinding() {
        return BindingBuilder
                .bind(notifyMsgQueue())
                .to(notifyMsgDirectExchange())
                .with(RoutingKeyName.NOTIFY_MSG);
    }
}

Mq传输对象需要实现Serializable。

@Data
@ToString
public class NotifyMsgSendVO implements Serializable {

    private static final long serialVersionUID = 5905249092659173678L;

    private String priKey;

    private String businessType;

    private String phoneNum;

    private String msg;


}

Mq生产者,直接注入RabbitTemplate,调用方法传入交换机名称及路由键,它会根据之前设置的绑定关系将消息路由到对应的队列中由队列另一端的消费者消费。

@Slf4j
@Component
public class NotifyMsgProducer {
    @Resource
    private RabbitTemplate rabbitTemplate;

  
    public void send(NotifyMsgSendVO notifyMsgSendVO) {
        log.debug("生产消息【{}】",notifyMsgSendVO);
        this.rabbitTemplate.convertAndSend(ExchangeName.NOTIFY_MSG.name(),
                RoutingKeyName.NOTIFY_MSG.name(), notifyMsgSendVO);
    }
}

Mq消费者,使用@RabbitListener注解指定对应的队列即可消费消息,这里值得一说的是,在消费者中需要处理一下异常,如果不处理会导致消费者无法继续消费。

@Component
@Slf4j
public class NotifyMsgConsumer {

    @RabbitListener(queues = QueueNames.NOTIFY_MSG_QUEUE)
    public void msgSend(NotifyMsgSendVO vo) {
        System.out.println("消费者收到消息:"+vo);
    }
}
测试

这里提供了一个http接口,调用接口可以生成一个测试消息。

@RestController
public class TestMqController {

    @Resource
    private NotifyMsgProducer notifyMsgProducer;

    @GetMapping("/produce")
    public String produce() {
        NotifyMsgSendVO vo = new NotifyMsgSendVO();
        vo.setPriKey(UUID.randomUUID().toString());
        vo.setPhoneNum("191xxxxxxxx");
        vo.setBusinessType("msg_send");
        notifyMsgProducer.send(vo);
        return "success";
    }
}

调用接口:http://localhost:9091/produce
查看控制台日志:在这里插入图片描述
可以看到消费者已经收到了消息。
看完记得点赞哦!
下面是源代码地址:https://gitee.com/ErGouGeSiBaKe/springboot-rabbitmq

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-10 13:17:12  更:2021-08-10 13:17:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 15:32:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码