springboot整合消息队列RabbitMQ

前言:

RabbitMQ常用的三种Exchange Type:fanout、direct、topic。

fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中。

direct:把消息投递到那些binding key与routing key完全匹配的队列中。

topic:将消息路由到binding key与routing key模式匹配的队列中。

这里基于springboot整合​ ​消息队列​​,测试这三种Exchange。

启动RabbitMQ

双击运行rabbitmq-server.bat:

SpringBoot整合RabbitMQ——Direct模式(默认模式)

创建springboot web项目——发送者springboot-sender

追加测试和rabbitmq所需的依赖:

<!-- 添加springboot对amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!--添加测试包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.9.RELEASE</version> </dependency>

修改配置文件application.yml  application.properties:

server: port: 7001 spring: application: name: spirngboot-sender rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest

发送的信息可以是基本数据类型也可以是对象,这里创建一个用户对象

public class User implements Serializable{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

创建一个配置类:SenderConfiguration.java

一个名为queue1的 队列

@Configuration public class SenderConfiguration { @Bean public Queue directQueue() { return new Queue("queue1"); } }

创建一个发送信息类:SenderService.java

发送user对象给queue1队列

@Component public class SenderService { @Autowired private AmqpTemplate template; public void sendUser() { User user=new User(); user.setUsername("张三"); user.setPassword("123456"); template.convertAndSend("queue1",user); } }

创建一个测试类:TestRabbitMQ.java

@SpringBootTest(classes=SpringbootSenderApplication.class) @RunWith(SpringJUnit4ClassRunner.class) public class TestRabbitMQ { @Autowired private SenderService senderService; @Test public void testRabbit() { senderService.sendUser(); } }

运行testRabbit方法:

创建springboot web项目——接收者springboot-receiver

修改配置文件application.yml  application.properties:

server: port: 7002 spring: application: name: spirngboot-receiver rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest

添加接收类:ReceiverService.java

@Component public class ReceiverService { @RabbitListener(queues="queue1") public void receiveUser(User user) { System.out.println("username:"+user.getUsername()+" password:"+user.getPassword()); } }

运行启动类:SpringbootApplication.java,结果:

信息成功被接收。

SpringBoot整合RabbitMQ——Topic模式(模糊匹配)

步骤与Direct差不多。

发送者:

修改配置类SenderConfiguration.java:

创建两个队列 topic1,topic2,创建一个topic交换器,绑定交换机和队列以及绑定规则

@Test public void testRabbit() { senderService.sendUser(); }@Bean(name="topic1") public Queue topicQueue1() { return new Queue("topic1"); } @Bean(name="topic2") public Queue topicQueue2() { return new Queue("topic2"); } @Bean public TopicExchange exchange() { //创建一个topic交换器 return new TopicExchange("topicExchange"); } @Bean Binding bindingExchangeTopic1(@Qualifier("topic1") Queue queueMessage, TopicExchange exchange) { //设置topic1绑定规则 return BindingBuilder.bind(queueMessage).to(exchange).with("topic.queue"); } @Bean Binding bindingExchangeTopic2(@Qualifier("topic2") Queue queueMessages, TopicExchange exchange) { //设置topic2绑定规则 *表示一个词,#表示零个或多个词 return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#"); }

修改发送类SenderService.java

User user=new User(); user.setUsername("张三"); user.setPassword("123456"); //发送给topicExchange的交换机 template.convertAndSend("topicExchange","topic.queue",user); template.convertAndSend("topicExchange","topic.anyting",user);

运行testRabbit方法:

成功广播出去两条信息

接收者:

修改接收类ReceiverService.java

@RabbitListener(queues="fanout1") public void receiveFanout1(User user) { System.out.println("队列:fanout1 username:"+user.getUsername()+" password:"+user.getPassword()); } @RabbitListener(queues="fanout2") public void receiveFanout2(User user) { System.out.println("队列:fanout2 username:"+user.getUsername()+" password:"+user.getPassword()); }

运行启动类,结果:

消息成功被发送接收

到此这篇关于springboot整合消息队列RabbitMQ的文章就介绍到这了,更多相关springboot整合RabbitMQ内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    SpringBoot自动配置的实现原理是什么

    SpringBoot自动配置的实现原理是什么,配置,组件,文件,方法,注册,获取,一、什么是springboot自动配置SpringBoot通过@EnableAutoConfiguration注

    SpringBoot启动流程是什么

    SpringBoot启动流程是什么,应用程序,方法,组件,上下文,对象,配置,SpringBoot启动过程简介SpringBoot应用程序的启动过程可以分为以下几个步骤:加

    mac安装rabbitmq(rabbitmq实例教程)

    mac安装rabbitmq(rabbitmq实例教程),热启动,冷启动,启动,方法,磁盘,系统,  启动DOS指把磁盘中的DOS系统模块装入内存.启动的方法一般分为

    SpringBoot之整合Shiro

    SpringBoot之整合Shiro,SpringBoot,之,整合,Shiro,1.SpringBoot,整合,Shiro,,1.SpringBoot整合Shiro思路2. 环境搭建2.1 创建项目2.2 引入

    SpringBoot与SpringCache

    SpringBoot与SpringCache,SpringBoot,与,SpringCache,1.SpringCache,的,概念,首先,,1.SpringCache的概念首先我们知道jpa,jdbc这些东西都

    SpringBoot集成kafka全面实战

    SpringBoot集成kafka全面实战,SpringBoot,集成,kafka,全面,实战,一,、,前戏,在,,一、前戏1、在项目中连接kafka,因为是外网,首先要开放kafka

    SpringBoot集成Elasticseach

    SpringBoot集成Elasticseach,SpringBoot,集成,Elasticseach,一,、,Elasticseach,介绍,,  一、Elasticseach介绍  1.简单介绍  官网: