阅读 82

SpringBoot2.x系列教程37--SpringBoot中整合RabbitMQ实现消息传递

前言

在上一篇文章中,壹哥 带大家搭建了RabbitMQ的开发环境。那么接下来,我们就按照之前的经验,先创建3个Web程序。一个用作消息生产者,一个作为消费者,还有一个作为存放通用代码类,并将之改造成Spring Boot项目,具体过程略。

整个项目的目录结构如下:

一. 创建存放通用代码的common项目

这个项目中很简单,只有一个User类,并将该类实现序列化。

package com.yyg.boot.domain; import lombok.Data; import lombok.ToString; import java.io.Serializable; /**  * @Author 一一哥Sun  * @Date Created in 2020/4/14  * @Description Description  */ @Data @ToString public class User implements Serializable {     private Long id;     private String username;     private String password; } 复制代码

二. 创建消息生产者项目

1. 添加依赖包

<!--amqp消息队列的依赖包--> <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency>     <groupId>com.yyg.boot</groupId>     <artifactId>demo38_amqp_common</artifactId>     <version>1.0-SNAPSHOT</version> </dependency> 复制代码

2. 创建application.yml配置文件

spring:   application:     name: amqp-producer   rabbitmq:     host: localhost     port: 5672     username: guest     password: guest 复制代码

3. 创建队列配置

package com.yyg.boot.config; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /**  * @Author 一一哥Sun  * @Date Created in 2020/4/16  * @Description Description  */ @Configuration public class RabbitMQConfig {     //交换机和队列要进行绑定:     //默认的交换机是DirectExchange,     //每个交换机都需要利用路由键来和队列绑定在一起.     //如果采用的是DirectExchange交换机,默认情况下,队里的名字就是路由键的名字.     //该交换机是一对一的,一个消息被发送者发送出去之后,只能被一个消费者接受.     @Bean     public Queue queue(){         //firstRabbit,是队列的名字,         return new Queue("firstRabbit");     }     @Bean     public Queue objectQueue(){         //firstRabbit,是队列的名字,         return new Queue("firstObject");     } } 复制代码

4. 创建消息提供者

package com.yyg.boot.mq; import com.yyg.boot.domain.User; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; /**  * @Author 一一哥Sun  * @Date Created in 2020/4/16  * @Description Description  */ @Slf4j @Component public class RabbitProducer {     @Autowired     private AmqpTemplate template;     public void sendMsg() {         //Message msg=new Message();         //template.send(msg);         //第一个参数是路由键         String content="hello,"+new Date();         log.warn("消息发送--->content={}",content);         template.convertAndSend("firstRabbit", content);     }     //发送对象     public void sendUser() {         User user=new User();         user.setId(1L);         user.setUsername("syc");         user.setPassword("123");         log.warn("消息发送--->User={}",user.toString());         template.convertAndSend("firstObject", user);     } } 复制代码

5. 创建测试用例

package com.yyg.boot; import com.yyg.boot.mq.RabbitProducer; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /**  * @Author 一一哥Sun  * @Date Created in 2020/4/16  * @Description Description  */ @RunWith(SpringRunner.class) @SpringBootTest(classes = ProducerApplication.class) public class FirstRabbitTest {     @Autowired     private RabbitProducer producer;     @Test     public void firstSendTest() {         for (int i = 0; i < 10; i++) {             producer.sendMsg();         }     } } 复制代码

6. 项目入口类

package com.yyg.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /**  * @Author 一一哥Sun  * @Date Created in 2020/4/16  * @Description Description  */ @SpringBootApplication public class ProducerApplication {     public static void main(String[] args){         SpringApplication.run(ProducerApplication.class,args);     } } 复制代码

7. 完整项目结构

8. 启动测试类

执行测试类中的firstSendTest()测试方法.看到控制台打印如下日志.

并且此时RabbitMQ中的firstRabbit队列中有10条待消费的消息。

三. 创建消息消费者模块

1. 创建application.yml配置文件

spring:   application:     name: amqp-consumer   rabbitmq:     host: localhost     port: 5672     username: guest     password: guest 复制代码

2. 创建消息消费者

利用@RabbitListener和@RabbitHandler这两个注解,实现消息接收的监听。

package com.yyg.boot.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; /**  * @Author 一一哥Sun  * @Date Created in 2020/4/16  * @Description Description  */ @Slf4j @Component public class RabbitConsumer {     @RabbitListener(queues = "firstRabbit")     @RabbitHandler     public void receiveMsg(String msg) {         log.warn("接受消息---->content:{}", msg);     } } 复制代码

3. 项目入口类

package com.yyg.boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /**  * @Author 一一哥Sun  * @Date Created in 2020/4/16  * @Description Description  */ @SpringBootApplication public class ConsumerApplication {     public static void main(String[] args){         SpringApplication.run(ConsumerApplication.class,args);     } } 复制代码

4. 完整项目结构

5. 启动项目,接收消息

项目启动后,可以看到控制台打印如下消息。

此时可以看到,RabbitMQ控制台中firstRabbit队列中的消息已经被全部消费掉了,消息数量为0.

结语

至此,壹哥 就带大家简单实现了RabbitMQ的消息发送,后面还有更高级的功能,我们以后再学!


作者:一一哥Sun
链接:https://juejin.cn/post/7171944549898518564


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐