You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tet/snailmall-cart-service/src/main/java/com/njupt/swg/message/MessageReceiver.java

59 lines
4.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.njupt.swg.message;
import com.njupt.swg.common.utils.JsonUtil;
import com.njupt.swg.service.ICartService;
import lombok.extern.slf4j.Slf4j;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @Author swg.
* @Date 2019/1/7 13:23
* @CONTACT 317758022@qq.com
* @DESC 这个类MessageReceiver是一个消息接收者组件用于处理通过消息队列RabbitMQ接收到的消息
* 在整个项目架构中,它承担着从消息队列获取消息并基于消息内容执行相应业务逻辑的职责,例如这里接收到消息后会调用购物车服务来清除对应用户的购物车。
*/
@Component
// 使用 @Component注解将这个类标记为Spring的一个组件这样Spring容器会自动扫描并管理这个类的实例使其可以参与依赖注入等Spring相关的功能。
@Slf4j
// 通过 @Slf4j注解使用Lombok的功能自动为这个类添加一个名为log的日志记录器方便在类中记录各种运行时的日志信息有助于调试、监控和追踪代码的执行情况。
public class MessageReceiver {
// 通过Spring的依赖注入机制自动注入ICartService接口的实现类对象用于调用购物车相关的业务逻辑方法
// 在这里具体用于执行清除购物车的操作依赖注入使得代码的耦合性更低方便替换不同的购物车服务实现类并且符合Spring的面向接口编程的理念。
@Autowired
private ICartService cartService;
/**
* 这个方法是一个消息监听器方法,通过 @RabbitListener注解配置了它与消息队列的绑定关系用于监听特定队列"cart-queue")中的消息,
* 当有消息到达该队列时,这个方法就会被触发执行,它会接收消息队列传递过来的消息,并基于消息内容进行相应的业务逻辑处理,在这里主要是清除对应用户的购物车操作。
*
* @param message 表示从消息队列中接收到的消息内容在这里消息内容预期是一个可以转换为整数类型的字符串代表用户的ID
* 它的具体格式和含义由发送消息的一端决定本方法接收到消息后会对其进行解析并转化为相应的业务操作参数userId进而执行后续的清除购物车操作。
*/
@RabbitListener(bindings = @QueueBinding(
value = @Queue("cart-queue"),
exchange = @Exchange("cart-exchange")
))
public void proess(String message) {
// 使用日志记录器记录接收到的消息内容,方便在运行时查看接收到的消息具体是什么,有助于调试和排查问题,例如查看消息是否符合预期格式等情况。
log.info("接收到的消息为:{}", message);
// 将接收到的消息预期是一个字符串形式的整数转换为实际的整数类型userId这里假设发送过来的消息内容就是有效的用户ID字符串表示形式
// 如果消息格式不符合要求可能会抛出NumberFormatException异常在实际应用中可能需要更完善的错误处理机制来应对这种情况。
Integer userId = Integer.parseInt(message);
// 再次使用日志记录器记录解析后的用户ID信息便于在日志中清晰地看到处理的用户相关数据方便后续查看消息处理的具体情况以及追踪问题比如查看是否处理了正确的用户的购物车清除操作等。
log.info("【MQ解析数据,前者为userId,后者为productId{}】", userId);
// 调用ICartService的removeCart方法传入解析得到的用户IDuserId执行清除对应用户购物车的业务操作
// 这个操作可能涉及到数据库中购物车相关记录的删除等具体的持久层操作具体由ICartService的实现类中对应的方法逻辑来决定。
cartService.removeCart(userId);
}
}