Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)

一、背景

本章讲述的是在用户下单环节,消息服务器RabbitMQ 的应用

1.1 消息服务器的应用

在写一个电商项目的小demo,在电商项目中,消息服务器的应用:

1、订单状态通知:当用户下单、支付成功、订单发货、订单完成等关键节点时,可以通过消息服务器向用户发送相应的订单状态通知。

2、消息推送:通过消息服务器,可以向用户推送个性化的推荐商品、促销活动等消息,以提高用户参与度和购买率。

3、异步处理:在一些涉及到耗时操作的场景中,比如库存扣减、物流跟踪等,可以将任务交给消息服务器进行异步处理,以提高系统的并发性和响应速度。

4、实时聊天:如果你的电商系统支持在线客服或用户之间的实时沟通,消息服务器可以用于实现即时通讯功能。

5、消息队列:消息服务器还可以作为消息队列的承载者,实现系统内不同模块之间的解耦和异步通信。

消息服务器的选择可以考虑使用开源的消息队列中间件,比如RabbitMQ、Apache Kafka、ActiveMQ等,或者云服务提供商提供的消息队列服务,比如阿里云的消息队列RocketMQ、腾讯云的消息队列CMQ等。

需要注意的是,在使用消息服务器时,确保数据的安全性和可靠性,并合理设计消息的格式和传输方式,以确保系统的正常运行和用户体验。

1.2 下单这个环节,消息服务器应用场景

用户下单这个环节,应用消息服务器有以下几个常见的应用场景:

1、异步处理订单:当用户下单后,可以将订单信息发送到消息服务器中,由消息服务器异步处理。这样可以减少用户等待时间,并提高系统的并发能力。消息服务器可以负责处理订单的各种业务逻辑,比如库存扣减、生成物流单号等操作。

2、订单状态通知:在用户下单后,可以通过消息服务器向用户发送订单状态的通知,比如订单已提交、支付成功、订单发货、订单完成等。消息服务器可以实时地将通知推送给用户,提供良好的用户体验。

3、订单状态跟踪:在整个订单生命周期中,消息服务器可以记录和跟踪订单的状态变化。当用户查询订单状态时,可以通过消息服务器获取最新的订单状态信息,确保订单状态的准确性和实时性。

4、消息队列:消息服务器可以作为消息队列的组件,对订单相关的消息进行队列化处理。这样可以解耦订单模块与其他模块之间的依赖关系,提高系统的稳定性和可扩展性。

二、RabbitMQ 的下载与安装

2.1 RabbitMQ的官网地址:

RabbitMQ的官网地址:

RabbitMQ: easy to use, flexible messaging and streaming --- RabbitMQ

2.2. 使用brew安装

1、安装

复制代码
brew install rabbitmq

安装结果:

rabbitmq 的安装路径:

/opt/homebrew/opt/rabbitmq

2、配置环境变量

复制代码
vi ~/.bash_profile

export RABBIT_HOME=${PATH}:/opt/homebrew/opt/rabbitmq
export PATH=${PATH}:$RABBIT_HOME/sbin

source ~/.bash_profile

2.3 启动RabbitMQ

1、前台运行

rabbitmq-server

2、后台运行

rabbitmq-server -detached

3、查看运行状态

rabbitmqctl status

4、开始 Web插件

rabbitmq-plugins enable rabbitmq_management

5、重启

rabbitmq-server restart

5、关闭

rabbitmqctl stop

2.4、访问MQ

1、浏览器地址

http://localhost:15672/

默认用户名和密码为guest

添加用户

rabbitmqctl add_user miaojiang 123

设置用户为管理员

rabbitmqctl set_user_tags miaojiang administrator

配置用户可以远程登录

rabbitmqctl set_permissions -p "/" miaojaing ".*" ".*" ".*"

查看新添加的账户

rabbitmqctl list_users

查看用于的权限

rabbitmqctl list_permissions -p /

三、Spring Boot 项目应用RabbitMQ

3.1、添加Maven依赖:

在你的项目的pom.xml文件中添加RabbitMQ客户端库的依赖

复制代码
<!--AMQP依赖,包含RabbitMQ-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

3.2、配置RabbitMQ连接:

在Spring Boot的配置文件(application.properties 或 application.yml)中添加RabbitMQ的连接信息。

application.properties:

复制代码
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

在application.yml配置mq的参数:

复制代码
spring:
  rabbitmq:
    #设置RabbitMQ的IP地址
    host: localhost
    #设置rabbitmq服务器用户名
    username: guest
    #设置rabbitmq服务器密码
    password: guest
    #设置rabbitmq服务器连接端口
    port: 5672

3.3 创建交换机

自定义交换机名称

创建名为"myExchange"的交换机

java 复制代码
package com.example.usermanagement.mq;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
    /*
    使用 @Configuration 注解创建一个配置类,并通过 @Bean 注解创建了一个名为 declareExchange 的方法,用于声明创建交换机。请根据实际情况修改交换机名称、类型和持久化设置。
     */

    public static final String EXCHANGE_NAME = "myExchange";

    @Bean
    public Exchange declareExchange() {
        return ExchangeBuilder.directExchange(EXCHANGE_NAME)
                .durable(true)
                .build();
    }
}

3.4 创建消息发送者

创建消息发送者:创建一个消息发送者的类,用于发送消息到RabbitMQ

java 复制代码
package com.example.usermanagement.mq;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageSender{

    private final AmqpTemplate amqpTemplate;
    private final String exchangeName = "myExchange"; // 自定义交换机名称

    @Autowired
    public MessageSender(AmqpTemplate amqpTemplate) {
        this.amqpTemplate = amqpTemplate;
    }

    public void sendMessage(Object message) {
        amqpTemplate.convertAndSend(exchangeName, "", message); // 发送消息到默认交换机和空路由键
    }
}

注意:

sendMessage 类型使用的是Object类型

3.5 RabbitMQ管理后台添加对列

步骤:

  1. 打开浏览器,输入RabbitMQ管理后台的URL。默认情况下,该URL为http://localhost:15672/。请确保你的RabbitMQ服务器正在运行,并且端口号正确。

  2. 输入用户名和密码以登录到RabbitMQ管理后台。默认情况下,用户名为guest,密码也为guest。如果你修改过用户名和密码,请使用你的自定义凭据进行登录。

  3. 成功登录后,你将看到RabbitMQ管理后台的主界面。在顶部导航栏中,选择Queues选项卡。

  4. Queues页面上,你将看到已经存在的队列列表。如果你想要创建一个新队列,请点击Add a new queue按钮。

  5. 在添加队列的页面上,填写以下信息:

    • Name:队列的名称。为队列提供一个唯一的名称。(如myQueue)
    • Durability:队列的持久性。选择是或否,以指定队列是否应该在RabbitMQ服务重启后保留。
    • Auto delete:队列的自动删除。选择是或否,以指定当最后一个消费者断开连接后,是否删除队列。
    • Arguments:队列的其他参数。这是可选的,你可以为队列设置一些特定的参数。
  6. 填写完队列信息后,点击Add queue按钮以创建队列。

  7. 创建成功后,你将在Queues页面上看到新添加的队列。你可以在该页面上查看队列的详细信息,包括消息数量、消费者数量等。

http://localhost:15672/#/queues

只需要添加队列名称就可以

3.6 调用生产者

1、注入MessageSender实例

java 复制代码
@Autowired
private MessageSender messageSender;

2、在需要发送消息的地方调用messageSender.sendMessage方法。根据你的业务逻辑,你可以在合适的位置调用该方法。例如,在订单创建成功后,你可以添加以下代码:

java 复制代码
messageSender.sendMessage("订单已创建:" + order.getOrderId());

3.7 创建消息接收者

创建消息接收者:创建一个消息接收者的类,用于处理接收到的RabbitMQ消息。

这里就直接写处理RabbitMQ消息的逻辑。

java 复制代码
package com.example.usermanagement.mq;

import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageReceiver {

    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("your_queue_name"),
            exchange = @Exchange(value = RabbitMQConfig.EXCHANGE_NAME)
//            key = "your_routing_key"
    ))
    public void receiveMessage(Object message) {
        System.out.println("Received message: " + message);
        // 处理消息逻辑
    }
}

注意:

sendMessage 类型使用的是Object类型

your_queue_name 替换为你要监听的队列的名称,(如myQueue)

your_routing_key 替换为适当的路由键(如果使用)

相关推荐
柯南二号3 分钟前
【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略
java·spring boot·mybatis
javachen__1 小时前
SpringBoot整合P6Spy实现全链路SQL监控
spring boot·后端·sql
IT毕设实战小研7 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
一只爱撸猫的程序猿8 小时前
使用Spring AI配合MCP(Model Context Protocol)构建一个"智能代码审查助手"
spring boot·aigc·ai编程
甄超锋8 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
武昌库里写JAVA11 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
Pitayafruit12 小时前
Spring AI 进阶之路03:集成RAG构建高效知识库
spring boot·后端·llm
zru_960212 小时前
Spring Boot 单元测试:@SpyBean 使用教程
spring boot·单元测试·log4j
甄超锋13 小时前
Java Maven更换国内源
java·开发语言·spring boot·spring·spring cloud·tomcat·maven
还是鼠鼠13 小时前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven