当前位置: 首页 > news >正文

微服务学习(2):实现SpringAMQP对RabbitMQ的消息收发

目录

SpringAMQP是什么

为什么采用SpringAMQP

SpringAMQP应用

准备springBoot工程

实现消息发送


SpringAMQP是什么

Spring AMQP是Spring框架下用于简化AMQP(高级消息队列协议)应用开发的一套工具集,主要针对RabbitMQ等消息中间件的集成。它提供了基于模板的消息发送和接收方法(如AmqpTemplate),以及用于配置和管理交换机、队列及其绑定关系的机制。通过Spring AMQP,开发者可以方便地将消息队列功能整合到Spring项目中。

为什么采用SpringAMQP

将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。RabbitMQ官方提供的Java客户端编码相对复杂,一般生产环境下我们更多会结合Spring来使用。而Spring的官方刚好基于RabbitMQ提供了这样一套消息收发的模板工具:SpringAMQP。并且还基于SpringBoot对其实现了自动装配,使用起来非常方便。

SpringAMQP提供了三个功能:

1.自动声明队列、交换机及其绑定关系

2.基于注解的监听器模式,异步接收消息

3.封装了RabbitTemplate工具,用于发送消息

SpringAMQP应用

准备springBoot工程

新建一个springboot工程,包括三部分:

  • mq-demo:父工程,管理项目依赖

  • publisher:消息的发送者

  • consumer:消息的消费者

工程目录如图所示:

pom.xml文件导入依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.itcast.demo</groupId>
    <artifactId>mq-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>publisher</module>
        <module>consumer</module>
    </modules>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.12</version>
        <relativePath/>
    </parent>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--AMQP依赖,包含RabbitMQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
</project>

如此,子工程中就可以直接使用SpringAMQP。

实现消息发送

首先配置MQ地址,在publisher服务的application.yml和consumer服务的application.yml中添加配置:

spring:
  rabbitmq:
    host: 192.168.12.101 # 你的虚拟机IP
    port: 5672 # 端口
    virtual-host: /user # 你的虚拟主机
    username: user # 用户名
    password: 123 # 密码

然后在publisher服务中编写测试类SpringAmqpTest,并利用RabbitTemplate实现消息发送:

@SpringBootTest
class SpringAmqpTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSimpleQueue() {
        // 队列名称
        String queueName = "hello.queue";
        // 消息
        String message = "hello rabbitmq";
        // 发送消息
        rabbitTemplate.convertAndSend(queueName, message);
    }
}

运行后,打开控制台,可以看到消息已经发送到队列中:

当然,我们可以在consumer服务的consumer.listener包中新建一个类SpringRabbitListener来接收,代码如下:

@Component
@Slf4j
public class SpringRabbitListener {

    @RabbitListener(queues = "hello.queue")
    public void listenSimpleQueue(String msg) {
        log.info("消费者收到消息:{}", msg);
    }
}

启动ConsumerApplication,控制台显示如下:

解读:实现SpringAMQP对RabbitMQ的消息收发的测试。

相关文章:

  • 普通人高效使用DeepSeek指南?
  • 复现NC图表:二分图 (bipartite plot) 网络绘制(三种方法)-应用于细胞互作受配体展示-调控网络展示等等
  • Windows安装sql server2017
  • GitCode 助力 JeeSite:开启企业级快速开发新篇章
  • week 3 - More on Collections - Lecture 3
  • 线反转法实现矩形键盘按键识别
  • QT播放视频保持视频宽高比消除黑边
  • 基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)
  • brew search报错,xcrun:error:invalid active developer path CommandLineTools
  • 通俗易懂的分类算法之决策树详解
  • 使用Simulink中的IsUpdated获取Rport的更新状态
  • 当我删除word文件时无法删除,提示:操作无法完成,因为已在Microsoft Word中打开
  • 一、舵机模块的分析与使用
  • flowable使用
  • 问题修复-后端返给前端的时间展示错误
  • 7.1 - 定时器之中断控制LED实验
  • SpringBoot原理-02.自动配置-概述
  • 微服务即时通信系统---(七)文件管理子服务
  • 飞书考勤Excel导入到自己系统
  • 网络原理--TCP/IP(2)
  • 物联网工程就业前景/360优化大师官方版
  • 潍坊网站维护/深圳品牌seo
  • 郑州哪家专业做淘宝网站/网络营销评价的名词解释
  • 企业网站制作服务器/本地推荐本地推荐
  • wordpress单页导航/网站优化公司认准乐云seo
  • 网站空间域名申请网站/seo公司优化