新增生产单导入异步处理

This commit is contained in:
gaoqr
2025-02-18 15:28:54 +08:00
parent d50d4772f0
commit b3306405c0
102 changed files with 7054 additions and 209 deletions
@@ -1,12 +1,25 @@
package com.cf.imes.framework.mq.rabbitmq.config;
import cn.hutool.core.util.ReflectUtil;
import com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.utils.SerializationUtils;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import static com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants.ORDER_IMPORT_DEAD_LETTER_EXCHANGE;
import static com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants.ORDER_IMPORT_DEAD_LETTER_QUEUE;
import static com.cf.imes.framework.mq.rabbitmq.constant.RabbitMqConstants.ORDER_IMPORT_DEAD_LETTER_ROUTING_KEY;
/**
* RabbitMQ 消息队列配置类
@@ -18,12 +31,75 @@ import java.lang.reflect.Field;
@ConditionalOnClass(name = "org.springframework.amqp.rabbit.core.RabbitTemplate")
public class ChenfengRabbitMQAutoConfiguration {
static {
// 强制设置 SerializationUtils 的 TRUST_ALL 为 true,避免 RabbitMQ Consumer 反序列化消息报错
// 为什么不通过设置 spring.amqp.deserialization.trust.all 呢?因为可能在 SerializationUtils static 初始化后
Field trustAllField = ReflectUtil.getField(SerializationUtils.class, "TRUST_ALL");
ReflectUtil.removeFinalModify(trustAllField);
ReflectUtil.setFieldValue(SerializationUtils.class, trustAllField, true);
/**
* Jackson2JsonMessageConverter Bean:使用 jackson 序列化消息
*/
@Bean
public MessageConverter createMessageConverter() {
return new Jackson2JsonMessageConverter();
}
/**
* 生产单导入交换机、队列、绑定声明
*
* @return
*/
@Bean
public FanoutExchange orderImportFanoutExchange() {
return new FanoutExchange(RabbitMqConstants.ORDER_IMPORT_DEFAULT_EXCEL_EXCHANGE);
}
/**
* 生产单导入队列声明
*
* @return
*/
@Bean
public Queue orderImportQueue() {
Map<String, Object> args = new HashMap<>(1);
// x-dead-letter-exchange 这里声明当前队列绑定的死信交换机
args.put("x-dead-letter-exchange", ORDER_IMPORT_DEAD_LETTER_EXCHANGE);
// 设置死信路由键
args.put("x-dead-letter-routing-key", ORDER_IMPORT_DEAD_LETTER_ROUTING_KEY);
return QueueBuilder.durable(RabbitMqConstants.ORDER_IMPORT_DEFAULT_EXCEL_QUEUE).withArguments(args).build();
}
/**
* 生产单excel导入交换机声明
*
* @return
*/
@Bean
public Binding orderImportDefaultExcelBinding() {
return BindingBuilder.bind(orderImportQueue()).to(orderImportFanoutExchange());
}
/**
* 生产单导入死信交换机声明
* @return
*/
@Bean
public DirectExchange orderImportDeadLetterExchange(){
return new DirectExchange(ORDER_IMPORT_DEAD_LETTER_EXCHANGE);
}
/**
* 生产单导入死信队列声明
* @return
*/
@Bean
public Queue orderImportDeadLetterQueue() {
return new Queue(ORDER_IMPORT_DEAD_LETTER_QUEUE);
}
/**
* 生产单导入死信队列、交换机、绑定声明
* @return
*/
@Bean
public Binding deadLetterBindingA() {
return BindingBuilder.bind(orderImportDeadLetterQueue()).to(orderImportDeadLetterExchange()).with(ORDER_IMPORT_DEAD_LETTER_ROUTING_KEY);
}
}
@@ -0,0 +1,34 @@
package com.cf.imes.framework.mq.rabbitmq.constant;
/**
* rabbitmq常量
*
* @author Gqr
* @since 2025/1/6 11:15
*/
public class RabbitMqConstants {
/**
* 生产单导入交换机
*/
public static final String ORDER_IMPORT_DEFAULT_EXCEL_EXCHANGE = "order_import_default_excel_exchange";
/**
* 生产单导入队列
*/
public static final String ORDER_IMPORT_DEFAULT_EXCEL_QUEUE = "order_import_default_excel_queue";
/**
* 生产单导入死信交换机
*/
public static final String ORDER_IMPORT_DEAD_LETTER_EXCHANGE = "order_import_dead_letter_exchange";
/**
* 生产单导入死信队列
*/
public static final String ORDER_IMPORT_DEAD_LETTER_QUEUE = "order_import_dead_letter_queue";
/**
* 生产单导入死信路由键
*/
public static final String ORDER_IMPORT_DEAD_LETTER_ROUTING_KEY = "order_import_dead_letter_routing_key";
}