RabbitMQ---Spring AMQP

Spring AMQP

1. 简介

Spring有很多不同的项目,其中就有对AMQP的支持:

Spring AMQP的页面:http://spring.io/projects/spring-amqp

注意这里一段描述:

Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现。底层使用的就是RabbitMQ。

2. 依赖和配置

添加AMQP的启动器:

java 复制代码
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

在application.yml中添加RabbitMQ地址:

java 复制代码
spring:
  rabbitmq:
    host: 192.168.137.137
    username: zhangsan
    password: 123456
    virtual-host: /shopping
    port: 5672

3. 监听者

在SpringAmqp中,对消息的消费者进行了封装和抽象,一个普通的JavaBean中的普通方法,只要通过简单的注解,就可以成为一个消费者。

java 复制代码
@Component
public class Listener {
   @RabbitListener(bindings = @QueueBinding(
           value = @Queue(value = "spring.test.queue", durable = "true"),
           exchange = @Exchange(
                   value = "spring.test.exchange",
                   ignoreDeclarationExceptions = "true",
                   type = ExchangeTypes.TOPIC
           ),
           key = {"#.#"}))
   public void listen(String msg){
       System.out.println("接收到消息:" + msg);
   }
}

• @Componet:类上的注解,注册到Spring容器

• @RabbitListener:方法上的注解,声明这个方法是一个消费者方法,需要指定下面的属性:

o bindings:指定绑定关系,可以有多个。值是@QueueBinding的数组。@QueueBinding包含下面属性:

o value:这个消费者关联的队列。值是@Queue,代表一个队列

o exchange:队列所绑定的交换机,值是@Exchange类型

o key:队列和交换机绑定的RoutingKey

类似listen这样的方法在一个类中可以写多个,就代表多个消费者。

4. AmqpTemplate

Spring最擅长的事情就是封装,把他人的框架进行封装和整合。

Spring为AMQP提供了统一的消息处理模板:AmqpTemplate,非常方便的发送消息,其发送方法:

红框圈起来的是比较常用的3个方法,分别是:

o 指定消息

o 指定RoutingKey和消息,会向默认的交换机发送消息

o 指定交换机、RoutingKey和消息体

5. 测试代码

java 复制代码
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MqDemo {
   @Autowired
   private AmqpTemplate amqpTemplate;
   @Test
   public void testSend() throws InterruptedException {
       String msg = "hello, Spring boot amqp";
       this.amqpTemplate.convertAndSend("spring.test.exchange","a.b", msg);
       // 等待10秒后再结束
       Thread.sleep(10000);
   }
}

运行后查看日志:

相关推荐
swipe12 分钟前
Agentic RAG:用 LangGraph 构建会路由、会纠错、会收敛的闭环 RAG
后端·langchain·llm
架构源启18 分钟前
Spring AI完整学习路线:从Java开发到AI Agent的进阶之路(附15篇实战教程)
java·人工智能·spring
折哥的程序人生 · 物流技术专研37 分钟前
《Java 100 天进阶之路》第23篇:缓冲区数据结构 ByteBuffer
java·开发语言·数据结构·后端·面试·求职招聘
还是鼠鼠40 分钟前
AI掘金头条新闻系统 (Toutiao News)-获取新闻分类
后端·python·mysql·fastapi·web
超梦dasgg1 小时前
Spring Security 原理 + 生产环境认证授权实战
java·后端·spring
憧憬成为java架构高手的小白1 小时前
黑马八股准备篇
spring
东方小月1 小时前
Claude Code Skill 完全指南:一个 markdown 文件,就是一个专家分身
前端·后端
DianSan_ERP2 小时前
抖店订单接口中消费者信息加密解密机制与安全履约全解析
前端·网络·数据库·后端·安全·团队开发·运维开发
紫洋葱_popo2 小时前
一文吃透 LangChain 流式输出:同步、异步、LCEL 链式穿透全解析
后端
松就是我902982 小时前
LLM 代理服务实现原理文档
后端