refactor(mq): 提取 ArtemisBeanNames 常量类,消除 Bean 名字符串字面量

将 common-artemis 模块引用的 JMS Bean 名(jmsTemplate / topicJmsTemplate /
topicListenerFactory)集中到新建的 ArtemisBeanNames 接口,替换
ArtemisCommonAutoConfiguration、ArtemisTemplateService 及消费端
(DemoTopicConsumer、CacheInvalidationConsumer)中的字符串字面量。

同时清理遗留的对账单模板.xlsx(对账模块已删除)。
This commit is contained in:
DaxPay Dev
2026-06-19 19:18:10 +08:00
parent f1e666469c
commit 980a9569a3
6 changed files with 33 additions and 15 deletions

View File

@@ -6,6 +6,7 @@ import org.dromara.daxpay.payment.admin.controller.demo.constant.DemoArtemisCons
import org.dromara.daxpay.payment.admin.controller.demo.message.DemoArtemisMessage;
import org.dromara.daxpay.payment.admin.controller.demo.result.DemoMessageResult;
import org.dromara.daxpay.payment.admin.controller.demo.store.DemoMessageStore;
import org.dromara.daxpay.platform.common.artemis.ArtemisBeanNames;
import org.dromara.daxpay.platform.common.json.util.JacksonUtil;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@@ -25,13 +26,13 @@ public class DemoTopicConsumer {
private final DemoMessageStore store;
/// 订阅者 A
@JmsListener(destination = DemoArtemisConstants.TOPIC, containerFactory = "topicListenerFactory")
@JmsListener(destination = DemoArtemisConstants.TOPIC, containerFactory = ArtemisBeanNames.TOPIC_LISTENER_FACTORY)
public void onMessageA(String json) {
handle(json, "demo-topic-consumer-A");
}
/// 订阅者 B同节点模拟多订阅者
@JmsListener(destination = DemoArtemisConstants.TOPIC, containerFactory = "topicListenerFactory")
@JmsListener(destination = DemoArtemisConstants.TOPIC, containerFactory = ArtemisBeanNames.TOPIC_LISTENER_FACTORY)
public void onMessageB(String json) {
handle(json, "demo-topic-consumer-B");
}

View File

@@ -4,6 +4,7 @@ import org.dromara.daxpay.platform.capability.cache.core.LocalCacheRegistry;
import org.dromara.daxpay.platform.capability.cache.notify.message.CacheInvalidationMessage;
import org.dromara.daxpay.platform.capability.cache.notify.message.CacheInvalidationType;
import org.dromara.daxpay.platform.capability.cache.notify.support.CacheTopicConstants;
import org.dromara.daxpay.platform.common.artemis.ArtemisBeanNames;
import org.dromara.daxpay.platform.common.json.util.JacksonUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -40,7 +41,7 @@ public class CacheInvalidationConsumer {
/// 方法签名接收原始 JSON 字符串(统一 Text 传输),手动反序列化为目标类型。
@JmsListener(
destination = CacheTopicConstants.TOPIC,
containerFactory = "topicListenerFactory"
containerFactory = ArtemisBeanNames.TOPIC_LISTENER_FACTORY
)
public void onMessage(String json) {
CacheInvalidationMessage message;

View File

@@ -0,0 +1,21 @@
package org.dromara.daxpay.platform.common.artemis;
/// # Artemis Bean 名常量
///
/// 集中维护 common-artemis 模块引用到的所有 JMS Bean 名,
/// 供 `@Bean` / `@ConditionalOnMissingBean` / `@Qualifier` /
/// `@JmsListener(containerFactory=...)` 引用,避免散落的字符串字面量。
public interface ArtemisBeanNames {
/// Queue 发送模板 Bean 名pubSubDomain=false
///
/// Spring Boot `JmsAutoConfiguration` 默认装配,非本项目自定义
String QUEUE_JMS_TEMPLATE = "jmsTemplate";
/// Topic 发送模板 Bean 名pubSubDomain=true本项目自定义
String TOPIC_JMS_TEMPLATE = "topicJmsTemplate";
/// Topic 监听容器工厂 Bean 名pubSubDomain=true本项目自定义
/// 所有订阅 Topic 的 `@JmsListener` 通过 `containerFactory` 引用
String TOPIC_LISTENER_FACTORY = "topicListenerFactory";
}

View File

@@ -44,20 +44,14 @@ import org.springframework.jms.core.JmsTemplate;
@EnableJms
public class ArtemisCommonAutoConfiguration {
/// Topic 发送模板的 Bean 名
public static final String TOPIC_JMS_TEMPLATE = "topicJmsTemplate";
/// Topic 监听容器工厂的 Bean 名,供所有 `@JmsListener` 订阅 Topic 时引用
public static final String TOPIC_LISTENER_FACTORY = "topicListenerFactory";
/// Topic 发送专用 JmsTemplatepubSubDomain=true
///
/// 与 Spring Boot 默认的 `jmsTemplate`Queue 模式)共存,
/// 由 `ArtemisTemplateService` 通过 `@Qualifier` 注入。
///
/// 不设置 MessageConverter回落到 Spring 默认 `SimpleMessageConverter`String ↔ TextMessage 透传)。
@Bean(TOPIC_JMS_TEMPLATE)
@ConditionalOnMissingBean(name = TOPIC_JMS_TEMPLATE)
@Bean(ArtemisBeanNames.TOPIC_JMS_TEMPLATE)
@ConditionalOnMissingBean(name = ArtemisBeanNames.TOPIC_JMS_TEMPLATE)
public JmsTemplate topicJmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate template = new JmsTemplate(connectionFactory);
// 关键:开启 pub-sub 模式destination 解析为 Topicmulticast
@@ -70,8 +64,8 @@ public class ArtemisCommonAutoConfiguration {
/// 所有需要订阅 Topic 的 `@JmsListener` 通过
/// `containerFactory = "topicListenerFactory"` 引用,
/// 取代各业务模块自行创建重复的 Topic ListenerFactory。
@Bean(TOPIC_LISTENER_FACTORY)
@ConditionalOnMissingBean(name = TOPIC_LISTENER_FACTORY)
@Bean(ArtemisBeanNames.TOPIC_LISTENER_FACTORY)
@ConditionalOnMissingBean(name = ArtemisBeanNames.TOPIC_LISTENER_FACTORY)
public JmsListenerContainerFactory<?> topicListenerFactory(ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);

View File

@@ -1,5 +1,6 @@
package org.dromara.daxpay.platform.common.artemis.service;
import org.dromara.daxpay.platform.common.artemis.ArtemisBeanNames;
import org.dromara.daxpay.platform.common.artemis.ArtemisCommonAutoConfiguration;
import org.dromara.daxpay.platform.common.artemis.exception.ArtemisException;
import cn.hutool.core.lang.UUID;
@@ -52,8 +53,8 @@ public class ArtemisTemplateService {
/// Topic 模板pubSubDomain=true见 [ArtemisCommonAutoConfiguration#topicJmsTemplate]
private final JmsTemplate topicJmsTemplate;
public ArtemisTemplateService(@Qualifier("jmsTemplate") JmsTemplate queueJmsTemplate,
@Qualifier(ArtemisCommonAutoConfiguration.TOPIC_JMS_TEMPLATE) JmsTemplate topicJmsTemplate) {
public ArtemisTemplateService(@Qualifier(ArtemisBeanNames.QUEUE_JMS_TEMPLATE) JmsTemplate queueJmsTemplate,
@Qualifier(ArtemisBeanNames.TOPIC_JMS_TEMPLATE) JmsTemplate topicJmsTemplate) {
this.queueJmsTemplate = queueJmsTemplate;
this.topicJmsTemplate = topicJmsTemplate;
}