springboot整合消息队列——RabbitMQ
创始人
2024-06-02 05:58:18
0

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

  1. fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中。
  2. direct:把消息投递到那些binding key与routing key完全匹配的队列中。
  3. topic:将消息路由到binding key与routing key模式匹配的队列中。

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

1,启动RabbitMQ

双击运行rabbitmq-server.bat
在这里插入图片描述

SpringBoot整合RabbitMQ——Direct模式(默认模式)
创建springboot web项目——发送者 springboot-sender

2,追加测试和rabbitmq所需的依赖


org.springframework.bootspring-boot-starter-amqp


org.springframework.bootspring-boot-test

junitjunit

org.springframeworkspring-test5.0.9.RELEASE

3,修改配置文件 application.yml 或 application.properties:

server:port: 7001
spring:application:name: spirngboot-senderrabbitmq:host: 127.0.0.1port: 5672username: guestpassword: 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;}
}

4,创建一个配置类: SenderConfiguration.java

一个名为 queue1 的​ ​队列​ ​

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

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

发送 user 对象给 queue1 队列

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

5,创建一个测试类: TestRabbitMQ.java

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

运行 testRabbit 方法:
在这里插入图片描述

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

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

server:port: 7002
spring:application:name: spirngboot-receiverrabbitmq:host: 127.0.0.1port: 5672username: guestpassword: 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,结果:
在这里插入图片描述
在这里插入图片描述

信息成功被接收。

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

步骤与Direct差不多。

发送者:

8,修改配置类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.#");
}

9,修改发送类 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 方法:
在这里插入图片描述

9,成功广播出去两条信息

接收者:
修改接收类 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());
}

运行启动类,结果:
在这里插入图片描述
在这里插入图片描述

消息成功被发送接收。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...