个人网站建设案例教程,济南建设银行网站,网站建设公司需要有什么东西,海外推广是什么工作一、背景
本章讲述的是在用户下单环节#xff0c;消息服务器RabbitMQ 的应用
1.1 消息服务器的应用
在写一个电商项目的小demo#xff0c;在电商项目中#xff0c;消息服务器的应用#xff1a;
1、订单状态通知#xff1a;当用户下单、支付成功、订单发货、订单完成等…一、背景
本章讲述的是在用户下单环节消息服务器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--
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId
/dependency3.2、配置RabbitMQ连接
在Spring Boot的配置文件(application.properties 或 application.yml)中添加RabbitMQ的连接信息。
application.properties:
spring.rabbitmq.hostlocalhost
spring.rabbitmq.port5672
spring.rabbitmq.usernameguest
spring.rabbitmq.passwordguest在application.yml配置mq的参数
spring:rabbitmq:#设置RabbitMQ的IP地址host: localhost#设置rabbitmq服务器用户名username: guest#设置rabbitmq服务器密码password: guest#设置rabbitmq服务器连接端口port: 56723.3 创建交换机
自定义交换机名称
创建名为“myExchange”的交换机
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;Beanpublic Exchange declareExchange() {return ExchangeBuilder.directExchange(EXCHANGE_NAME).durable(true).build();}
} 3.4 创建消息发送者
创建消息发送者创建一个消息发送者的类用于发送消息到RabbitMQ
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; // 自定义交换机名称Autowiredpublic MessageSender(AmqpTemplate amqpTemplate) {this.amqpTemplate amqpTemplate;}public void sendMessage(Object message) {amqpTemplate.convertAndSend(exchangeName, , message); // 发送消息到默认交换机和空路由键}
}
注意 sendMessage 类型使用的是Object类型 3.5 RabbitMQ管理后台添加对列
步骤 打开浏览器输入RabbitMQ管理后台的URL。默认情况下该URL为http://localhost:15672/。请确保你的RabbitMQ服务器正在运行并且端口号正确。 输入用户名和密码以登录到RabbitMQ管理后台。默认情况下用户名为guest密码也为guest。如果你修改过用户名和密码请使用你的自定义凭据进行登录。 成功登录后你将看到RabbitMQ管理后台的主界面。在顶部导航栏中选择Queues选项卡。 在Queues页面上你将看到已经存在的队列列表。如果你想要创建一个新队列请点击Add a new queue按钮。 在添加队列的页面上填写以下信息 Name队列的名称。为队列提供一个唯一的名称。如myQueue)Durability队列的持久性。选择是或否以指定队列是否应该在RabbitMQ服务重启后保留。Auto delete队列的自动删除。选择是或否以指定当最后一个消费者断开连接后是否删除队列。Arguments队列的其他参数。这是可选的你可以为队列设置一些特定的参数。 填写完队列信息后点击Add queue按钮以创建队列。 创建成功后你将在Queues页面上看到新添加的队列。你可以在该页面上查看队列的详细信息包括消息数量、消费者数量等。
http://localhost:15672/#/queues
只需要添加队列名称就可以 3.6 调用生产者
1、注入MessageSender实例
Autowired
private MessageSender messageSender;
2、在需要发送消息的地方调用messageSender.sendMessage方法。根据你的业务逻辑你可以在合适的位置调用该方法。例如在订单创建成功后你可以添加以下代码
messageSender.sendMessage(订单已创建 order.getOrderId());
3.7 创建消息接收者
创建消息接收者创建一个消息接收者的类用于处理接收到的RabbitMQ消息。
这里就直接写处理RabbitMQ消息的逻辑。
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 替换为适当的路由键如果使用