Spring Boot整合RabbitMQ

embedded/2024/11/8 20:30:40/

这里只会演示部分常用的工作模式

1.工作队列模式

1.1引入相关依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><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>

1.2编写yml配置

spring:application:name: rabbitmq-spring-bootrabbitmq:addresses: amqp://pikes:123456@121.36.254.234:5672/pikes

1.3编写生产者代码

@RequestMapping("/producer")
@RestController
public class ProducerController {@Autowiredprivate RabbitTemplate rabbitTemplate;@RequestMapping("/work")public String work(){for(int i=0;i<10;i++){//使用内置交换机,RoutingKey和队列名称一致rabbitTemplate.convertAndSend("", Constants.WORK_QUEUE,"hello spring amqp: work..."+i);}return "发送成功";}

编写消费者代码


@Component
public class WorkListener {@RabbitListener(queues = Constants.WORK_QUEUE)public void queueListener1(Message message, Channel channel){System.out.println("listener 1 ["+ Constants.WORK_QUEUE+"] 接收到消息:" +message + ",channel:"+channel);}@RabbitListener(queues = Constants.WORK_QUEUE)public void queueListener2(Message message, Channel channel){System.out.println("listener 2 ["+ Constants.WORK_QUEUE+"] 接收到消息:" +message + ",channel:"+channel);}
}
@RabbitListener 是Spring框架中⽤于监听RabbitMQ队列的注解, 通过使⽤这个注解,可以定
义⼀个⽅法, 以便从RabbitMQ队列中接收消息. 该注解⽀持多种参数类型,这些参数类型代表了从
RabbitMQ接收到的消息和相关信息.
以下是⼀些常⽤的参数类型:
1. String :返回消息的内容
2. Message ( org.springframework.amqp.core.Message ): Spring AMQP的
Message 类,返回原始的消息体以及消息的属性, 如消息ID, 内容, 队列信息等.
3. Channel ( com.rabbitmq.client.Channel ):RabbitMQ的通道对象, 可以⽤于进⾏更
⾼级的操作,如⼿动确认消息

2.发布订阅模式

2.1声明队列交换机

@Configuration
public class RabbitMQConfig {@Bean("workQueue")public Queue workQueue(){return QueueBuilder.durable(Constants.WORK_QUEUE).build();}//声明两个队列@Bean("fanoutQueue1")public Queue fanoutQueue1(){return QueueBuilder.durable(Constants.FANOUT_QUEUE1).build();}@Bean("fanoutQueue2")public Queue fanoutQueue2(){return QueueBuilder.durable(Constants.FANOUT_QUEUE2).build();}//声明交换机@Bean("fanoutExchange")public FanoutExchange fanoutExchange(){return ExchangeBuilder.fanoutExchange(Constants.FANOUT_EXCHANGE).durable(true).build();}//队列和交换机绑定@Beanpublic Binding fanoutBinding1(@Qualifier("fanoutExchange") FanoutExchange fanoutExchange,@Qualifier("fanoutQueue1") Queue queue){return BindingBuilder.bind(queue).to(fanoutExchange);}@Beanpublic Binding fanoutBinding2(@Qualifier("fanoutExchange") FanoutExchange fanoutExchange,@Qualifier("fanoutQueue2") Queue queue){return BindingBuilder.bind(queue).to(fanoutExchange);}

2.2生产者代码

   @RequestMapping("/fanout")public String fanout(){//routingKey为空,表示所有队列都可以收到信息rabbitTemplate.convertAndSend(Constants.FANOUT_EXCHANGE,"","hello spring amqp:fanout...");return "发送成功";}@Request

2.3消费者代码


@Component
public class FanoutListener {@RabbitListener(queues = Constants.FANOUT_QUEUE1)public void queueListener1(String message){System.out.println("队列["+Constants.FANOUT_QUEUE1+"] 接收到消息:" +message);}@RabbitListener(queues = Constants.FANOUT_QUEUE2)public void queueListener2(String message){System.out.println("队列["+Constants.FANOUT_QUEUE2+"] 接收到消息:" +message);}
}

路由模式和通配符模式跟上面模式差不多 ,就不过多演示


http://www.ppmy.cn/embedded/135983.html

相关文章

什么是Mysql事务-特性-类型

什么是事务 事务&#xff08;Transaction&#xff09; 是并发控制的基本单位。 所谓的事务&#xff0c;它是一个操作序列&#xff0c;这些操作要么都 执行&#xff0c;要么都不执行&#xff0c;它是一个不可分割的工作单位。 事务是数据库维护数据一致性的单位&#xff0c;在每…

人保财险(外包)面试分享

前言&#xff1a; 这是本月面的第三家公司&#xff0c;太难了兄弟们&#xff0c;外包都不好找了&#xff0c;临近年底&#xff0c;金九银十已经错过了&#xff0c;金三银四虽然存在&#xff0c;但按照这几年的行情&#xff0c;金九银十和金三银四其实已经是不复存在了&#xf…

鸿蒙生态崛起:开发者的机遇与挑战

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题 点这里。 实战项目访问&#xff1a;http://javapub.net.cn/ 引言 作为一名技术博主&#xff0c;我对技术趋势始终保持着敏锐的洞察力。在数字化时代&#xff0c;操作系统作为智能设备的核心&#xff0c;其重要性不言而喻。随…

如何利用动态住宅IP突破亚马逊反爬虫验证码机制

在进行亚马逊等电商平台的网页爬虫开发时&#xff0c;开发者往往会遇到验证码拦截问题。验证码是一种常见的反爬机制&#xff0c;旨在阻止自动化爬虫获取数据。许多爬虫开发者在尝试抓取亚马逊数据时发现&#xff0c;频繁的访问会导致验证码的触发&#xff0c;进一步阻碍数据采…

mac 安装 nodemon

在 Mac 上安装 nodemon 有两种主要方法 全局安装 1. 前提条件 确保你已经安装了 Node.js 和 npm。你可以在终端中输入 node -v 和 npm -v 来检查是否已经安装以及查看它们的版本号。 2. 使用命令安装 打开终端&#xff0c;输入以下命令来全局安装 nodemon sudo npm insta…

Python http打印(http打印body)flask demo(http调试demo、http demo、http printer)

文章目录 代码解释 代码 # flask_http_printer.pyfrom flask import Flask, request, jsonify import jsonapp Flask(__name__)app.route(/printinfo, methods[POST]) def print_info():# 分隔符separator "-" * 60# 获取请求头headers request.headers# 获取 JS…

React前端框架

一、React概述 1. 什么是React&#xff1f; React是由Facebook开发并维护的一个用于构建用户界面的JavaScript库。它采用组件化开发模式&#xff0c;允许开发者将UI拆分为独立且可复用的组件。自2013年发布以来&#xff0c;React迅速成为了前端开发中最受欢迎的库之一。 2. …

服装品牌零售业态融合中的创新发展:以开源 AI 智能名片 S2B2C 商城小程序为视角

摘要&#xff1a;本文以服装品牌零售业态融合为背景&#xff0c;探讨信息流优化和资金流创新的重要作用&#xff0c;并结合开源 AI 智能名片 S2B2C 商城小程序&#xff0c;分析其如何进一步推动服装品牌在零售领域的发展&#xff0c;提高运营效率和用户体验&#xff0c;实现商业…