Spring项目中RabbitMq的使用(工作队列模式)

实现步骤:

1. 引入依赖

2. 编写基本的配置信息

3. 编写生产者代码

4. 编写消费者代码


引入依赖


如代码:

复制代码
<!--Spring MVC相关依赖--> 
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</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>

在这里我们也可以直接在创建项目的直接引入。

如图:


修改yml配置文件


如代码:

复制代码
#配置RabbitMQ的基本信息 
spring:
 rabbitmq:
 host: 110.41.51.65
 port: 15673 #默认为5672 
 username: study
 password: study
 virtual-host: bite #默认值为 /

注意上面的host一定要改成自己云服务器的主机IP。


编写生产者代码


在常量类中声明队列模式。

如代码:

复制代码
//work模式队列名称 
public static final String WORK_QUEUE = "work_queue";

@Configuration
public class RabbitMQConfig {
 //1. ⼯作模式队列 
 @Bean("workQueue")
 public Queue workQueue() {
 return QueueBuilder.durable(Constants.WORK_QUEUE).build();
 }
}

编写生产者代码:

复制代码
​
@RequestMapping("/producer")
@RestController
public class ProducerController {
 @Autowired
 private RabbitTemplate rabbitTemplate;
 @RequestMapping("/work")
 public String work(){
    for (int i = 0; i < 10; i++) {
 //使⽤内置交换机发送消息, routingKey和队列名称保持⼀致 
       rabbitTemplate.convertAndSend("", Constants.WORK_QUEUE, "hello 
       spring amqp: work...");
   }
     return "发送成功";
  }
}

​

如上述代码所示,通过依赖注入的rabbitTemplate,通过这个对象我们可以直接调用,spring内部封装好的方法,直接发送消息。


编写消费者代码


如代码:

复制代码
@Component
public class WorkListener {
 @RabbitListener(queues = Constants.WORK_QUEUE)
 public void listenerQueue(Message message){
      System.out.println("listener 1["+Constants.WORK_QUEUE+"]收到消息:" + 
   message);
  }
 @RabbitListener(queues = Constants.WORK_QUEUE)
 public void listenerQueue2(Message message){
     System.out.println("listener 2["+Constants.WORK_QUEUE+"]收到消息:" + 
   message);
  }
}

@RabbitListener 是Spring框架中用于监听RabbitMQ队列的注解,通过使用这个注解,可以定 义⼀个方法,以便从RabbitMQ队列中接收消息。该注解支持多种参数类型,这些参数类型代表了从 RabbitMQ接收到的消息和相关信息.

相关推荐
2501_9414043117 小时前
面向微服务分布式缓存与热点数据防护的互联网系统高可用设计与多语言工程实践分享
rabbitmq·memcached
Keep_Trying_Go18 小时前
accelerate 深度学习分布式训练库的使用详细介绍(单卡/多卡分布式训练)
人工智能·pytorch·分布式·深度学习
数据库知识分享者小北19 小时前
免费体验《自建 MySQL 迁移至 PolarDB 分布式 V2.0》
数据库·分布式·mysql·阿里云·云原生·polardb
2501_9418204919 小时前
面向零信任安全与最小权限模型的互联网系统防护设计思路与多语言工程实践分享
开发语言·leetcode·rabbitmq
ZePingPingZe19 小时前
@TransactionalEventListener:事务事件监听的艺术
分布式·spring·rabbitmq
2501_9418752820 小时前
分布式系统中的安全权限与审计工程实践方法论经验总结与多语言示例解析分享
开发语言·rabbitmq
回家路上绕了弯20 小时前
日志输出优化实战:从“能用”到“好用”的全攻略
分布式·后端
十月南城21 小时前
分布式事务方法论——2PC/TCC/SAGA与基于消息的最终一致性对照
分布式
2501_9418798121 小时前
多语言微服务架构下的微服务消息幂等性与重试机制实践
rabbitmq
2501_941804321 天前
从单机缓存到分布式缓存高可用与一致性体系落地的互联网系统工程实践随笔与多语言语法思考
rabbitmq·memcached