diff --git a/dax-pay/pom.xml b/dax-pay/pom.xml
index b9d4282c7..474c7eb32 100644
--- a/dax-pay/pom.xml
+++ b/dax-pay/pom.xml
@@ -110,12 +110,20 @@
common-starter-quartz
-
+
- cn.bootx.platform
- common-rabbitmq
+ org.springframework.boot
+ spring-boot-starter-amqp
+ true
+
+ org.apache.rocketmq
+ rocketmq-spring-boot
+ ${rocketmq.version}
+
+
+
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/PaymentEventCode.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/PaymentEventCode.java
index 49aed3fce..14a29f56a 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/PaymentEventCode.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/code/PaymentEventCode.java
@@ -3,7 +3,10 @@ package cn.bootx.platform.daxpay.code;
public interface PaymentEventCode {
/** 支付中心交换机 */
- String EXCHANGE_PAYMENT = "service.payment";
+ String EXCHANGE_PAYMENT = "service.exchange";
+
+ /** 支付中心交换机 */
+ String DELAYED_EXCHANGE_PAYMENT = "service.delayedExchange";
/** 支付完成 */
String PAY_COMPLETE = "pay.complete";
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/configuration/DaxPayProperties.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/configuration/DaxPayProperties.java
new file mode 100644
index 000000000..60212e8fc
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/configuration/DaxPayProperties.java
@@ -0,0 +1,37 @@
+package cn.bootx.platform.daxpay.configuration;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * 项目
+ * @author xxm
+ * @since 2023/7/17
+ */
+@Getter
+@Setter
+@ConfigurationProperties(prefix = "bootx.daxpay")
+public class DaxPayProperties {
+
+ /**
+ * 消息队列类型
+ */
+ private MqType mqType = MqType.SPRING;
+
+ /**
+ * 消息队列类型
+ * @author xxm
+ * @since 2023/7/17
+ */
+ public enum MqType{
+ /** Spring 消息 */
+ SPRING,
+ /** ActiveMQ */
+ ACTIVE,
+ /** RabbitMQ */
+ RABBIT,
+ /** RocketMQ */
+ ROCKET;
+ }
+}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/builder/PayEventBuilder.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/builder/PayEventBuilder.java
index 5f68455b7..8a4ae89cf 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/builder/PayEventBuilder.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/core/pay/builder/PayEventBuilder.java
@@ -1,9 +1,9 @@
package cn.bootx.platform.daxpay.core.pay.builder;
import cn.bootx.platform.daxpay.core.payment.entity.Payment;
-import cn.bootx.platform.daxpay.event.PayCancelEvent;
-import cn.bootx.platform.daxpay.event.PayCompleteEvent;
-import cn.bootx.platform.daxpay.event.PayRefundEvent;
+import cn.bootx.platform.daxpay.mq.event.PayCancelEvent;
+import cn.bootx.platform.daxpay.mq.event.PayCompleteEvent;
+import cn.bootx.platform.daxpay.mq.event.PayRefundEvent;
import lombok.experimental.UtilityClass;
/**
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PayMqMsgSender.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PayMqMsgSender.java
new file mode 100644
index 000000000..2998ac7bb
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PayMqMsgSender.java
@@ -0,0 +1,24 @@
+package cn.bootx.platform.daxpay.mq;
+
+import cn.bootx.platform.daxpay.mq.event.PayEvent;
+
+/**
+ * 支付消息队列发送接口定义
+ * @author xxm
+ * @since 2023/7/17
+ */
+public interface PayMqMsgSender {
+
+ /**
+ * 实时推送MQ消息
+ * @param msg 消息
+ */
+ void send(PayEvent msg);
+
+ /**
+ * 推送MQ延迟消息
+ * @param msg 消息
+ * @param delay 延迟时间, 单位秒
+ */
+ void send(PayEvent msg, int delay);
+}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentEventSender.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentEventSender.java
index 50cff3926..ab49e3c2b 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentEventSender.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentEventSender.java
@@ -1,12 +1,13 @@
package cn.bootx.platform.daxpay.mq;
import cn.bootx.platform.daxpay.code.PaymentEventCode;
-import cn.bootx.platform.daxpay.event.PayCancelEvent;
-import cn.bootx.platform.daxpay.event.PayCompleteEvent;
-import cn.bootx.platform.daxpay.event.PayRefundEvent;
+import cn.bootx.platform.daxpay.mq.event.PayCancelEvent;
+import cn.bootx.platform.daxpay.mq.event.PayCompleteEvent;
+import cn.bootx.platform.daxpay.mq.event.PayRefundEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.retry.annotation.Retryable;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@@ -22,7 +23,7 @@ import org.springframework.stereotype.Component;
@RequiredArgsConstructor
public class PaymentEventSender {
- private final RabbitTemplate rabbitTemplate;
+ private final PayMqMsgSender mqMsgSender;
/**
* 支付完成 事件发布
@@ -30,7 +31,7 @@ public class PaymentEventSender {
@Async("bigExecutor")
@Retryable(value = Exception.class)
public void sendPayComplete(PayCompleteEvent event) {
- rabbitTemplate.convertAndSend(PaymentEventCode.EXCHANGE_PAYMENT, PaymentEventCode.PAY_COMPLETE, event);
+ mqMsgSender.send(event);
}
/**
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/configuration/PaymentRabbitMqConfiguration.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentRabbitMqConfiguration.java
similarity index 94%
rename from dax-pay/src/main/java/cn/bootx/platform/daxpay/configuration/PaymentRabbitMqConfiguration.java
rename to dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentRabbitMqConfiguration.java
index ae4da542c..e04477fd0 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/configuration/PaymentRabbitMqConfiguration.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentRabbitMqConfiguration.java
@@ -1,4 +1,4 @@
-package cn.bootx.platform.daxpay.configuration;
+package cn.bootx.platform.daxpay.mq;
import cn.bootx.platform.daxpay.code.PaymentEventCode;
import org.springframework.amqp.core.Binding;
@@ -6,7 +6,6 @@ import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
/**
* 消息队列配置
@@ -14,7 +13,7 @@ import org.springframework.context.annotation.Configuration;
* @author xxm
* @since 2021/6/25
*/
-@Configuration
+//@Configuration
public class PaymentRabbitMqConfiguration {
/** 支付完成队列 */
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayCancelEvent.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayCancelEvent.java
similarity index 56%
rename from dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayCancelEvent.java
rename to dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayCancelEvent.java
index 88bcc5df6..33307b1b9 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayCancelEvent.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayCancelEvent.java
@@ -1,4 +1,4 @@
-package cn.bootx.platform.daxpay.event;
+package cn.bootx.platform.daxpay.mq.event;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -11,7 +11,7 @@ import lombok.experimental.Accessors;
*/
@Data
@Accessors(chain = true)
-public class PayCancelEvent {
+public class PayCancelEvent implements PayEvent{
/** 支付单ID */
private Long paymentId;
@@ -19,4 +19,12 @@ public class PayCancelEvent {
/** 业务单号 */
private String businessId;
+ /**
+ * MQ队列名称
+ */
+ @Override
+ public String getQueueName() {
+ return null;
+ }
+
}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayCompleteEvent.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayCompleteEvent.java
similarity index 56%
rename from dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayCompleteEvent.java
rename to dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayCompleteEvent.java
index 93faac7ca..8ee4db12b 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayCompleteEvent.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayCompleteEvent.java
@@ -1,4 +1,4 @@
-package cn.bootx.platform.daxpay.event;
+package cn.bootx.platform.daxpay.mq.event;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -11,7 +11,7 @@ import lombok.experimental.Accessors;
*/
@Data
@Accessors(chain = true)
-public class PayCompleteEvent {
+public class PayCompleteEvent implements PayEvent{
/** 支付单ID */
private Long paymentId;
@@ -19,4 +19,11 @@ public class PayCompleteEvent {
/** 业务单号 */
private String businessId;
+ /**
+ * MQ队列名称
+ */
+ @Override
+ public String getQueueName() {
+ return null;
+ }
}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayEvent.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayEvent.java
new file mode 100644
index 000000000..a741c2e2c
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayEvent.java
@@ -0,0 +1,16 @@
+package cn.bootx.platform.daxpay.mq.event;
+
+/**
+ * Mq事件消息定义
+ * @author xxm
+ * @since 2023/7/17
+ */
+public interface PayEvent {
+ /** MQ队列名称 */
+ String getQueueName();
+ /** 要发送的消息体 */
+ default Object toMessage(){
+ return this;
+ };
+
+}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayRefundEvent.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayRefundEvent.java
similarity index 56%
rename from dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayRefundEvent.java
rename to dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayRefundEvent.java
index 55e9dc707..ff76e40e8 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/event/PayRefundEvent.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/event/PayRefundEvent.java
@@ -1,4 +1,4 @@
-package cn.bootx.platform.daxpay.event;
+package cn.bootx.platform.daxpay.mq.event;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -11,7 +11,7 @@ import lombok.experimental.Accessors;
*/
@Data
@Accessors(chain = true)
-public class PayRefundEvent {
+public class PayRefundEvent implements PayEvent{
/** 支付单ID */
private Long paymentId;
@@ -19,4 +19,11 @@ public class PayRefundEvent {
/** 业务单号 */
private String businessId;
+ /**
+ * MQ队列名称
+ */
+ @Override
+ public String getQueueName() {
+ return null;
+ }
}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/config/PayRabbitBeanRegistry.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/config/PayRabbitBeanRegistry.java
new file mode 100644
index 000000000..e44b7108e
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/config/PayRabbitBeanRegistry.java
@@ -0,0 +1,80 @@
+package cn.bootx.platform.daxpay.mq.vender.rabbit.config;
+
+import cn.bootx.platform.daxpay.code.PaymentEventCode;
+import cn.bootx.platform.daxpay.mq.event.PayEvent;
+import cn.hutool.core.util.ClassUtil;
+import cn.hutool.core.util.ReflectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import org.springframework.amqp.core.*;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import static cn.bootx.platform.daxpay.code.PaymentEventCode.DELAYED_EXCHANGE_PAYMENT;
+
+/**
+ * 注入Rabbit相关的消息类
+ * @author xxm
+ * @since 2023/7/17
+ */
+@Configuration
+@ConditionalOnProperty(name ="bootx.daxpay.mq-type", havingValue = "rabbit")
+public class PayRabbitBeanRegistry implements BeanDefinitionRegistryPostProcessor {
+
+
+ /** 自定义交换机: 用于延迟消息 **/
+ @Bean
+ CustomExchange delayedExchange() {
+ Map args = new HashMap<>();
+ args.put("x-delayed-type", "direct");
+ return new CustomExchange(DELAYED_EXCHANGE_PAYMENT, "x-delayed-message", true, false, args);
+ }
+
+ /**
+ * 注册Bean
+ * @param beanDefinitionRegistry 应用程序上下文使用的 Bean 定义注册表
+ */
+ @Override
+ public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
+ this.initRabbitBeans(beanDefinitionRegistry);
+ }
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
+ }
+
+ /**
+ * 初始化RabbitMQ相关的消息, 并注册到Bean容器中
+ */
+ public void initRabbitBeans(BeanDefinitionRegistry beanDefinitionRegistry){
+ // 扫描所有的消息类
+ Set> set = ClassUtil.scanPackageBySuper(ClassUtil.getPackage(PayEvent.class), PayEvent.class);
+ // 遍历
+ for (Class> clazz : set) {
+ // 实例化
+ PayEvent eventMsg = (PayEvent) ReflectUtil.newInstance(clazz);
+
+ // 注册队列(Queue)
+ RootBeanDefinition queueDefinition = new RootBeanDefinition(Queue.class, () -> new Queue(eventMsg.getQueueName()));
+ beanDefinitionRegistry.registerBeanDefinition(eventMsg.getQueueName(),queueDefinition);
+
+ // 注册与交换机的绑定关系Binding
+ Queue queue = SpringUtil.getBean(eventMsg.getQueueName(), Queue.class);
+ RootBeanDefinition bindingDefinition = new RootBeanDefinition(Binding.class,
+ BindingBuilder
+ .bind(queue)
+ .to(delayedExchange())
+ .with(PaymentEventCode.PAY_REFUND)::noargs);
+ beanDefinitionRegistry.registerBeanDefinition(eventMsg.getQueueName()+".exchange",bindingDefinition);
+ }
+ }
+}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentMessageListener.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/listener/PayRabbitMqMsgListener.java
similarity index 75%
rename from dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentMessageListener.java
rename to dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/listener/PayRabbitMqMsgListener.java
index 846177d1b..f2bf088e8 100644
--- a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/PaymentMessageListener.java
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/listener/PayRabbitMqMsgListener.java
@@ -1,14 +1,14 @@
-package cn.bootx.platform.daxpay.mq;
+package cn.bootx.platform.daxpay.mq.vender.rabbit.listener;
-import cn.bootx.platform.common.rabbit.conditional.ConditionalOnRabbit;
import cn.bootx.platform.daxpay.code.PaymentEventCode;
import cn.bootx.platform.daxpay.core.sync.service.PayExpiredTimeService;
-import cn.bootx.platform.daxpay.event.PayCancelEvent;
-import cn.bootx.platform.daxpay.event.PayCompleteEvent;
-import cn.bootx.platform.daxpay.event.PayRefundEvent;
+import cn.bootx.platform.daxpay.mq.event.PayCancelEvent;
+import cn.bootx.platform.daxpay.mq.event.PayCompleteEvent;
+import cn.bootx.platform.daxpay.mq.event.PayRefundEvent;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
/**
@@ -19,9 +19,9 @@ import org.springframework.stereotype.Component;
*/
@Slf4j
@Component
-@ConditionalOnRabbit
+@ConditionalOnProperty(name ="bootx.daxpay.mq-type", havingValue = "rabbit")
@RequiredArgsConstructor
-public class PaymentMessageListener {
+public class PayRabbitMqMsgListener {
private final PayExpiredTimeService payExpiredTimeService;
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/sender/PayRabbitMqMsgSender.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/sender/PayRabbitMqMsgSender.java
new file mode 100644
index 000000000..738d595dc
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rabbit/sender/PayRabbitMqMsgSender.java
@@ -0,0 +1,42 @@
+package cn.bootx.platform.daxpay.mq.vender.rabbit.sender;
+
+import cn.bootx.platform.daxpay.mq.PayMqMsgSender;
+import cn.bootx.platform.daxpay.mq.event.PayEvent;
+import lombok.RequiredArgsConstructor;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Service;
+
+import static cn.bootx.platform.daxpay.code.PaymentEventCode.DELAYED_EXCHANGE_PAYMENT;
+
+/**
+ * RabbitMQ消息发送器
+ * @author xxm
+ * @since 2023/7/17
+ */
+@Service
+@RequiredArgsConstructor
+@ConditionalOnProperty(name ="bootx.daxpay.mq-type", havingValue = "rabbit")
+public class PayRabbitMqMsgSender implements PayMqMsgSender {
+ private final RabbitTemplate rabbitTemplate;
+
+ /**
+ * 实时推送MQ消息
+ */
+ @Override
+ public void send(PayEvent msg) {
+ rabbitTemplate.convertAndSend(msg.getQueueName(), msg.toMessage());
+ }
+
+ /**
+ * 推送MQ延迟消息
+ */
+ @Override
+ public void send(PayEvent msg, int delay) {
+ rabbitTemplate.convertAndSend(DELAYED_EXCHANGE_PAYMENT, msg.getQueueName(), msg.toMessage(),
+ messagePostProcessor ->{
+ messagePostProcessor.getMessageProperties().setDelay(Math.toIntExact(delay * 1000L));
+ return messagePostProcessor;
+ });
+ }
+}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rocket/listener/PayRocketMqMsgListener.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rocket/listener/PayRocketMqMsgListener.java
new file mode 100644
index 000000000..29afde13b
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rocket/listener/PayRocketMqMsgListener.java
@@ -0,0 +1,12 @@
+package cn.bootx.platform.daxpay.mq.vender.rocket.listener;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+
+/**
+ * rocketMQ 消息监听
+ * @author xxm
+ * @since 2023/7/17
+ */
+@ConditionalOnProperty(name ="bootx.daxpay.mq-type", havingValue = "rocket")
+public class PayRocketMqMsgListener {
+}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rocket/sender/PayRocketMqMsgSender.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rocket/sender/PayRocketMqMsgSender.java
new file mode 100644
index 000000000..f571ba633
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/rocket/sender/PayRocketMqMsgSender.java
@@ -0,0 +1,36 @@
+package cn.bootx.platform.daxpay.mq.vender.rocket.sender;
+
+import cn.bootx.platform.daxpay.mq.PayMqMsgSender;
+import cn.bootx.platform.daxpay.mq.event.PayEvent;
+import lombok.RequiredArgsConstructor;
+import org.apache.rocketmq.spring.core.RocketMQTemplate;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Service;
+
+/**
+ * rocketMQ 发送器
+ * @author xxm
+ * @since 2023/7/17
+ */
+@Service
+@RequiredArgsConstructor
+@ConditionalOnProperty(name ="bootx.daxpay.mq-type", havingValue = "rocket")
+public class PayRocketMqMsgSender implements PayMqMsgSender {
+ private final RocketMQTemplate rocketMQTemplate;
+
+ /**
+ * 实时推送MQ消息
+ */
+ @Override
+ public void send(PayEvent msg) {
+ rocketMQTemplate.syncSend(msg.getQueueName(),msg.toMessage());
+ }
+
+ /**
+ * 推送MQ延迟消息
+ */
+ @Override
+ public void send(PayEvent msg, int delay) {
+ rocketMQTemplate.syncSend(msg.getQueueName(),msg.toMessage(),delay);
+ }
+}
diff --git a/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/spring/sender/PaySpringMsgSender.java b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/spring/sender/PaySpringMsgSender.java
new file mode 100644
index 000000000..1695de698
--- /dev/null
+++ b/dax-pay/src/main/java/cn/bootx/platform/daxpay/mq/vender/spring/sender/PaySpringMsgSender.java
@@ -0,0 +1,41 @@
+package cn.bootx.platform.daxpay.mq.vender.spring.sender;
+
+import cn.bootx.platform.daxpay.mq.PayMqMsgSender;
+import cn.bootx.platform.daxpay.mq.event.PayEvent;
+import lombok.RequiredArgsConstructor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.stereotype.Service;
+
+/**
+ * Spring 事件方式
+ * @author xxm
+ * @since 2023/7/17
+ */
+@Service
+@RequiredArgsConstructor
+@ConditionalOnProperty(name ="bootx.daxpay.mq-type", havingValue = "spring", matchIfMissing = true)
+public class PaySpringMsgSender implements PayMqMsgSender {
+ private final ApplicationEventPublisher applicationEventPublisher;
+
+ /**
+ * 实时推送MQ消息
+ *
+ * @param msg 消息
+ */
+ @Override
+ public void send(PayEvent msg) {
+ applicationEventPublisher.publishEvent(msg);
+ }
+
+ /**
+ * 推送MQ延迟消息
+ *
+ * @param msg 消息
+ * @param delay 延迟时间, 单位秒
+ */
+ @Override
+ public void send(PayEvent msg, int delay) {
+ applicationEventPublisher.publishEvent(msg);
+ }
+}
diff --git a/pom.xml b/pom.xml
index 56372790a..e97b52db7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,7 @@
0.2.0
1.5.3
4.5.2.B
+ 2.2.3
2.2.4