springboot整合消息队列RabbitMQ

 更新时间:2022年08月30日 16:18:40   作者:苦糖?​​​​​​​  
这篇文章主要介绍了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring boot 错误页面配置解决方案

    spring boot 错误页面配置解决方案

    这篇文章主要介绍了spring boot 错误页面配置解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • iOS多线程介绍

    iOS多线程介绍

    这篇文章主要介绍了iOS多线程的相关知识,涉及到对进程,线程等方面的知识讲解,本文非常具有参考价值,感兴趣的朋友一起学习吧
    2016-05-05
  • Spring Boot配置拦截器及实现跨域访问的方法

    Spring Boot配置拦截器及实现跨域访问的方法

    这篇文章主要介绍了Spring Boot配置拦截器及实现跨域访问的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Java 类与对象详细

    Java 类与对象详细

    这篇文章主要介绍了Java 类与对象,在Java中,我们把对象的特征称为属性,对象的用途称为方法,具有相同属性和方法的对象,我们把他们归为一类,简称类。下面文章讲详细介绍什么是Java类与对象,需要的朋友可以参考一下
    2021-10-10
  • Spring Boot2.0使用Spring Security的示例代码

    Spring Boot2.0使用Spring Security的示例代码

    这篇文章主要介绍了Spring Boot2.0使用Spring Security的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • HashMap和Hashtable的详细比较

    HashMap和Hashtable的详细比较

    这篇文章主要介绍了HashMap和Hashtable的详细比较的相关资料,需要的朋友可以参考下
    2017-04-04
  • java多线程并发中使用Lockers类将多线程共享资源锁定

    java多线程并发中使用Lockers类将多线程共享资源锁定

    Lockers在多线程编程里面一个重要的概念是锁定,如果一个资源是多个线程共享的,为了保证数据的完整性,在进行事务性操作时需要将共享资源锁定,这样可以保证在做事务性操作时只有一个线程能对资源进行操作,下面看一个示例
    2014-01-01
  • 一个简单的java学生寝室查询系统

    一个简单的java学生寝室查询系统

    这篇文章主要为大家详细介绍了一个简单的java学生寝室查询系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 基于selenium 获取新页面元素失败的解决方法

    基于selenium 获取新页面元素失败的解决方法

    今天小编就为大家分享一篇基于selenium 获取新页面元素失败的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • java中超过long范围的超大整数相加算法详解(面试高频)

    java中超过long范围的超大整数相加算法详解(面试高频)

    这篇文章主要介绍了java中超过long范围的超大整数相加算法(面试高频),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论