Commit d29b0beb9b528c379c78407730221250cf11965f

Authored by YunaiV
1 parent ade55d89

优化 mq starter 组件,增加 RedisMQTemplate 模板类

Showing 26 changed files with 137 additions and 75 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/message/config/InfConfigRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.infra.mq.message.config; 1 package cn.iocoder.yudao.adminserver.modules.infra.mq.message.config;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
5 5
6 /** 6 /**
7 * 配置数据刷新 Message 7 * 配置数据刷新 Message
8 */ 8 */
9 @Data 9 @Data
10 -public class InfConfigRefreshMessage implements ChannelMessage { 10 +public class InfConfigRefreshMessage extends AbstractChannelMessage {
11 11
12 @Override 12 @Override
13 public String getChannel() { 13 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/config/InfConfigProducer.java
1 package cn.iocoder.yudao.adminserver.modules.infra.mq.producer.config; 1 package cn.iocoder.yudao.adminserver.modules.infra.mq.producer.config;
2 2
3 import cn.iocoder.yudao.adminserver.modules.infra.mq.message.config.InfConfigRefreshMessage; 3 import cn.iocoder.yudao.adminserver.modules.infra.mq.message.config.InfConfigRefreshMessage;
4 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;  
5 -import org.springframework.data.redis.core.StringRedisTemplate; 4 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
6 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
7 6
8 import javax.annotation.Resource; 7 import javax.annotation.Resource;
@@ -14,14 +13,14 @@ import javax.annotation.Resource; @@ -14,14 +13,14 @@ import javax.annotation.Resource;
14 public class InfConfigProducer { 13 public class InfConfigProducer {
15 14
16 @Resource 15 @Resource
17 - private StringRedisTemplate stringRedisTemplate; 16 + private RedisMQTemplate redisMQTemplate;
18 17
19 /** 18 /**
20 * 发送 {@link InfConfigRefreshMessage} 消息 19 * 发送 {@link InfConfigRefreshMessage} 消息
21 */ 20 */
22 public void sendConfigRefreshMessage() { 21 public void sendConfigRefreshMessage() {
23 InfConfigRefreshMessage message = new InfConfigRefreshMessage(); 22 InfConfigRefreshMessage message = new InfConfigRefreshMessage();
24 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 23 + redisMQTemplate.send(message);
25 } 24 }
26 25
27 } 26 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dept/SysDeptRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.dept; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.dept;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 /** 7 /**
7 * 部门数据刷新 Message 8 * 部门数据刷新 Message
  9 + *
  10 + * @author 芋道源码
8 */ 11 */
9 @Data 12 @Data
10 -public class SysDeptRefreshMessage implements ChannelMessage { 13 +@EqualsAndHashCode(callSuper = true)
  14 +public class SysDeptRefreshMessage extends AbstractChannelMessage {
11 15
12 @Override 16 @Override
13 public String getChannel() { 17 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dict/SysDictDataRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.dict; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.dict;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 /** 7 /**
7 * 字典数据数据刷新 Message 8 * 字典数据数据刷新 Message
8 */ 9 */
9 @Data 10 @Data
10 -public class SysDictDataRefreshMessage implements ChannelMessage { 11 +@EqualsAndHashCode(callSuper = true)
  12 +public class SysDictDataRefreshMessage extends AbstractChannelMessage {
11 13
12 @Override 14 @Override
13 public String getChannel() { 15 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/mail/SysMailSendMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.mail; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.mail;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.stream.StreamMessage; 3 +import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 import javax.validation.constraints.NotNull; 7 import javax.validation.constraints.NotNull;
7 import java.util.Map; 8 import java.util.Map;
@@ -12,7 +13,8 @@ import java.util.Map; @@ -12,7 +13,8 @@ import java.util.Map;
12 * @author 芋道源码 13 * @author 芋道源码
13 */ 14 */
14 @Data 15 @Data
15 -public class SysMailSendMessage implements StreamMessage { 16 +@EqualsAndHashCode(callSuper = true)
  17 +public class SysMailSendMessage extends AbstractStreamMessage {
16 18
17 /** 19 /**
18 * 邮箱地址 20 * 邮箱地址
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysMenuRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 /** 7 /**
7 * 菜单数据刷新 Message 8 * 菜单数据刷新 Message
  9 + *
  10 + * @author 芋道源码
8 */ 11 */
9 @Data 12 @Data
10 -public class SysMenuRefreshMessage implements ChannelMessage { 13 +@EqualsAndHashCode(callSuper = true)
  14 +public class SysMenuRefreshMessage extends AbstractChannelMessage {
11 15
12 @Override 16 @Override
13 public String getChannel() { 17 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleMenuRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 /** 7 /**
7 * 角色与菜单数据刷新 Message 8 * 角色与菜单数据刷新 Message
  9 + *
  10 + * @author 芋道源码
8 */ 11 */
9 @Data 12 @Data
10 -public class SysRoleMenuRefreshMessage implements ChannelMessage { 13 +@EqualsAndHashCode(callSuper = true)
  14 +public class SysRoleMenuRefreshMessage extends AbstractChannelMessage {
11 15
12 @Override 16 @Override
13 public String getChannel() { 17 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.permission;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 /** 7 /**
7 * 角色数据刷新 Message 8 * 角色数据刷新 Message
  9 + *
  10 + * @author 芋道源码
8 */ 11 */
9 @Data 12 @Data
10 -public class SysRoleRefreshMessage implements ChannelMessage { 13 +@EqualsAndHashCode(callSuper = true)
  14 +public class SysRoleRefreshMessage extends AbstractChannelMessage {
11 15
12 @Override 16 @Override
13 public String getChannel() { 17 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsChannelRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.sms; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.sms;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 /** 7 /**
7 * 短信渠道的数据刷新 Message 8 * 短信渠道的数据刷新 Message
  9 + *
  10 + * @author 芋道源码
8 */ 11 */
9 @Data 12 @Data
10 -public class SysSmsChannelRefreshMessage implements ChannelMessage { 13 +@EqualsAndHashCode(callSuper = true)
  14 +public class SysSmsChannelRefreshMessage extends AbstractChannelMessage {
11 15
12 @Override 16 @Override
13 public String getChannel() { 17 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsTemplateRefreshMessage.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.sms; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.message.sms;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage; 3 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
4 import lombok.Data; 4 import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
5 6
6 /** 7 /**
7 * 短信模板的数据刷新 Message 8 * 短信模板的数据刷新 Message
  9 + *
  10 + * @author 芋道源码
8 */ 11 */
9 @Data 12 @Data
10 -public class SysSmsTemplateRefreshMessage implements ChannelMessage { 13 +@EqualsAndHashCode(callSuper = true)
  14 +public class SysSmsTemplateRefreshMessage extends AbstractChannelMessage {
11 15
12 @Override 16 @Override
13 public String getChannel() { 17 public String getChannel() {
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dept/SysDeptProducer.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;  
4 import cn.iocoder.yudao.adminserver.modules.system.mq.message.dept.SysDeptRefreshMessage; 3 import cn.iocoder.yudao.adminserver.modules.system.mq.message.dept.SysDeptRefreshMessage;
5 -import org.springframework.data.redis.core.StringRedisTemplate; 4 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
6 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
7 6
8 import javax.annotation.Resource; 7 import javax.annotation.Resource;
@@ -14,14 +13,14 @@ import javax.annotation.Resource; @@ -14,14 +13,14 @@ import javax.annotation.Resource;
14 public class SysDeptProducer { 13 public class SysDeptProducer {
15 14
16 @Resource 15 @Resource
17 - private StringRedisTemplate stringRedisTemplate; 16 + private RedisMQTemplate redisMQTemplate;
18 17
19 /** 18 /**
20 * 发送 {@link SysDeptRefreshMessage} 消息 19 * 发送 {@link SysDeptRefreshMessage} 消息
21 */ 20 */
22 public void sendDeptRefreshMessage() { 21 public void sendDeptRefreshMessage() {
23 SysDeptRefreshMessage message = new SysDeptRefreshMessage(); 22 SysDeptRefreshMessage message = new SysDeptRefreshMessage();
24 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 23 + redisMQTemplate.send(message);
25 } 24 }
26 25
27 } 26 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dict/SysDictDataProducer.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;  
4 import cn.iocoder.yudao.adminserver.modules.system.mq.message.dict.SysDictDataRefreshMessage; 3 import cn.iocoder.yudao.adminserver.modules.system.mq.message.dict.SysDictDataRefreshMessage;
5 -import org.springframework.data.redis.core.StringRedisTemplate; 4 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
6 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
7 6
8 import javax.annotation.Resource; 7 import javax.annotation.Resource;
@@ -14,14 +13,14 @@ import javax.annotation.Resource; @@ -14,14 +13,14 @@ import javax.annotation.Resource;
14 public class SysDictDataProducer { 13 public class SysDictDataProducer {
15 14
16 @Resource 15 @Resource
17 - private StringRedisTemplate stringRedisTemplate; 16 + private RedisMQTemplate redisMQTemplate;
18 17
19 /** 18 /**
20 * 发送 {@link SysDictDataRefreshMessage} 消息 19 * 发送 {@link SysDictDataRefreshMessage} 消息
21 */ 20 */
22 public void sendDictDataRefreshMessage() { 21 public void sendDictDataRefreshMessage() {
23 SysDictDataRefreshMessage message = new SysDictDataRefreshMessage(); 22 SysDictDataRefreshMessage message = new SysDictDataRefreshMessage();
24 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 23 + redisMQTemplate.send(message);
25 } 24 }
26 25
27 } 26 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysMenuProducer.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;  
4 import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysMenuRefreshMessage; 3 import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysMenuRefreshMessage;
5 -import org.springframework.data.redis.core.StringRedisTemplate; 4 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
6 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
7 6
8 import javax.annotation.Resource; 7 import javax.annotation.Resource;
@@ -14,14 +13,14 @@ import javax.annotation.Resource; @@ -14,14 +13,14 @@ import javax.annotation.Resource;
14 public class SysMenuProducer { 13 public class SysMenuProducer {
15 14
16 @Resource 15 @Resource
17 - private StringRedisTemplate stringRedisTemplate; 16 + private RedisMQTemplate redisMQTemplate;
18 17
19 /** 18 /**
20 * 发送 {@link SysMenuRefreshMessage} 消息 19 * 发送 {@link SysMenuRefreshMessage} 消息
21 */ 20 */
22 public void sendMenuRefreshMessage() { 21 public void sendMenuRefreshMessage() {
23 SysMenuRefreshMessage message = new SysMenuRefreshMessage(); 22 SysMenuRefreshMessage message = new SysMenuRefreshMessage();
24 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 23 + redisMQTemplate.send(message);
25 } 24 }
26 25
27 } 26 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysPermissionProducer.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;  
4 import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleMenuRefreshMessage; 3 import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleMenuRefreshMessage;
5 -import org.springframework.data.redis.core.StringRedisTemplate; 4 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
6 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
7 6
8 import javax.annotation.Resource; 7 import javax.annotation.Resource;
@@ -14,14 +13,14 @@ import javax.annotation.Resource; @@ -14,14 +13,14 @@ import javax.annotation.Resource;
14 public class SysPermissionProducer { 13 public class SysPermissionProducer {
15 14
16 @Resource 15 @Resource
17 - private StringRedisTemplate stringRedisTemplate; 16 + private RedisMQTemplate redisMQTemplate;
18 17
19 /** 18 /**
20 * 发送 {@link SysRoleMenuRefreshMessage} 消息 19 * 发送 {@link SysRoleMenuRefreshMessage} 消息
21 */ 20 */
22 public void sendRoleMenuRefreshMessage() { 21 public void sendRoleMenuRefreshMessage() {
23 SysRoleMenuRefreshMessage message = new SysRoleMenuRefreshMessage(); 22 SysRoleMenuRefreshMessage message = new SysRoleMenuRefreshMessage();
24 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 23 + redisMQTemplate.send(message);
25 } 24 }
26 25
27 } 26 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/permission/SysRoleProducer.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;  
4 import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleRefreshMessage; 3 import cn.iocoder.yudao.adminserver.modules.system.mq.message.permission.SysRoleRefreshMessage;
5 -import org.springframework.data.redis.core.StringRedisTemplate; 4 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
6 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
7 6
8 import javax.annotation.Resource; 7 import javax.annotation.Resource;
@@ -16,14 +15,14 @@ import javax.annotation.Resource; @@ -16,14 +15,14 @@ import javax.annotation.Resource;
16 public class SysRoleProducer { 15 public class SysRoleProducer {
17 16
18 @Resource 17 @Resource
19 - private StringRedisTemplate stringRedisTemplate; 18 + private RedisMQTemplate redisMQTemplate;
20 19
21 /** 20 /**
22 * 发送 {@link SysRoleRefreshMessage} 消息 21 * 发送 {@link SysRoleRefreshMessage} 消息
23 */ 22 */
24 public void sendRoleRefreshMessage() { 23 public void sendRoleRefreshMessage() {
25 SysRoleRefreshMessage message = new SysRoleRefreshMessage(); 24 SysRoleRefreshMessage message = new SysRoleRefreshMessage();
26 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 25 + redisMQTemplate.send(message);
27 } 26 }
28 27
29 } 28 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/sms/SysSmsProducer.java
1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms; 1 package cn.iocoder.yudao.adminserver.modules.system.mq.producer.sms;
2 2
3 -import cn.iocoder.yudao.framework.common.core.KeyValue;  
4 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils;  
5 import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsChannelRefreshMessage; 3 import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsChannelRefreshMessage;
6 import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsTemplateRefreshMessage; 4 import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsTemplateRefreshMessage;
  5 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
7 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
8 -import org.springframework.data.redis.core.StringRedisTemplate;  
9 import org.springframework.stereotype.Component; 7 import org.springframework.stereotype.Component;
10 8
11 import javax.annotation.Resource; 9 import javax.annotation.Resource;
12 -import java.util.List;  
13 10
14 /** 11 /**
15 * Sms 短信相关消息的 Producer 12 * Sms 短信相关消息的 Producer
@@ -22,14 +19,14 @@ import java.util.List; @@ -22,14 +19,14 @@ import java.util.List;
22 public class SysSmsProducer { 19 public class SysSmsProducer {
23 20
24 @Resource 21 @Resource
25 - private StringRedisTemplate stringRedisTemplate; 22 + private RedisMQTemplate redisMQTemplate;
26 23
27 /** 24 /**
28 * 发送 {@link SysSmsChannelRefreshMessage} 消息 25 * 发送 {@link SysSmsChannelRefreshMessage} 消息
29 */ 26 */
30 public void sendSmsChannelRefreshMessage() { 27 public void sendSmsChannelRefreshMessage() {
31 SysSmsChannelRefreshMessage message = new SysSmsChannelRefreshMessage(); 28 SysSmsChannelRefreshMessage message = new SysSmsChannelRefreshMessage();
32 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 29 + redisMQTemplate.send(message);
33 } 30 }
34 31
35 /** 32 /**
@@ -37,7 +34,7 @@ public class SysSmsProducer { @@ -37,7 +34,7 @@ public class SysSmsProducer {
37 */ 34 */
38 public void sendSmsTemplateRefreshMessage() { 35 public void sendSmsTemplateRefreshMessage() {
39 SysSmsTemplateRefreshMessage message = new SysSmsTemplateRefreshMessage(); 36 SysSmsTemplateRefreshMessage message = new SysSmsTemplateRefreshMessage();
40 - RedisMessageUtils.sendChannelMessage(stringRedisTemplate, message); 37 + redisMQTemplate.send(message);
41 } 38 }
42 39
43 } 40 }
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/message/sms/SysSmsSendMessage.java
1 package cn.iocoder.yudao.coreservice.modules.system.mq.message.sms; 1 package cn.iocoder.yudao.coreservice.modules.system.mq.message.sms;
2 2
3 import cn.iocoder.yudao.framework.common.core.KeyValue; 3 import cn.iocoder.yudao.framework.common.core.KeyValue;
4 -import cn.iocoder.yudao.framework.mq.core.stream.StreamMessage; 4 +import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage;
5 import lombok.Data; 5 import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
6 7
7 import javax.validation.constraints.NotNull; 8 import javax.validation.constraints.NotNull;
8 import java.util.List; 9 import java.util.List;
@@ -13,7 +14,8 @@ import java.util.List; @@ -13,7 +14,8 @@ import java.util.List;
13 * @author 芋道源码 14 * @author 芋道源码
14 */ 15 */
15 @Data 16 @Data
16 -public class SysSmsSendMessage implements StreamMessage { 17 +@EqualsAndHashCode(callSuper = true)
  18 +public class SysSmsSendMessage extends AbstractStreamMessage {
17 19
18 /** 20 /**
19 * 短信日志编号 21 * 短信日志编号
yudao-core-service/src/main/java/cn/iocoder/yudao/coreservice/modules/system/mq/producer/sms/SysSmsCoreProducer.java
@@ -2,9 +2,8 @@ package cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms; @@ -2,9 +2,8 @@ package cn.iocoder.yudao.coreservice.modules.system.mq.producer.sms;
2 2
3 import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; 3 import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage;
4 import cn.iocoder.yudao.framework.common.core.KeyValue; 4 import cn.iocoder.yudao.framework.common.core.KeyValue;
5 -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; 5 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
6 import lombok.extern.slf4j.Slf4j; 6 import lombok.extern.slf4j.Slf4j;
7 -import org.springframework.data.redis.core.StringRedisTemplate;  
8 import org.springframework.stereotype.Component; 7 import org.springframework.stereotype.Component;
9 8
10 import javax.annotation.Resource; 9 import javax.annotation.Resource;
@@ -21,7 +20,7 @@ import java.util.List; @@ -21,7 +20,7 @@ import java.util.List;
21 public class SysSmsCoreProducer { 20 public class SysSmsCoreProducer {
22 21
23 @Resource 22 @Resource
24 - private StringRedisTemplate stringRedisTemplate; 23 + private RedisMQTemplate redisMQTemplate;
25 24
26 /** 25 /**
27 * 发送 {@link SysSmsSendMessage} 消息 26 * 发送 {@link SysSmsSendMessage} 消息
@@ -36,7 +35,7 @@ public class SysSmsCoreProducer { @@ -36,7 +35,7 @@ public class SysSmsCoreProducer {
36 Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) { 35 Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) {
37 SysSmsSendMessage message = new SysSmsSendMessage().setLogId(logId).setMobile(mobile); 36 SysSmsSendMessage message = new SysSmsSendMessage().setLogId(logId).setMobile(mobile);
38 message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams); 37 message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams);
39 - RedisMessageUtils.sendStreamMessage(stringRedisTemplate, message); 38 + redisMQTemplate.send(message);
40 } 39 }
41 40
42 } 41 }
yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/config/YudaoMQAutoConfiguration.java
1 package cn.iocoder.yudao.framework.mq.config; 1 package cn.iocoder.yudao.framework.mq.config;
2 2
3 import cn.hutool.system.SystemUtil; 3 import cn.hutool.system.SystemUtil;
  4 +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
4 import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; 5 import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener;
5 import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener; 6 import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;
6 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; 7 import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
7 import lombok.extern.slf4j.Slf4j; 8 import lombok.extern.slf4j.Slf4j;
8 import org.springframework.boot.autoconfigure.AutoConfigureAfter; 9 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
9 -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;  
10 import org.springframework.context.annotation.Bean; 10 import org.springframework.context.annotation.Bean;
11 import org.springframework.context.annotation.Configuration; 11 import org.springframework.context.annotation.Configuration;
12 import org.springframework.data.redis.connection.RedisConnectionFactory; 12 import org.springframework.data.redis.connection.RedisConnectionFactory;
@@ -15,6 +15,7 @@ import org.springframework.data.redis.connection.stream.ObjectRecord; @@ -15,6 +15,7 @@ import org.springframework.data.redis.connection.stream.ObjectRecord;
15 import org.springframework.data.redis.connection.stream.ReadOffset; 15 import org.springframework.data.redis.connection.stream.ReadOffset;
16 import org.springframework.data.redis.connection.stream.StreamOffset; 16 import org.springframework.data.redis.connection.stream.StreamOffset;
17 import org.springframework.data.redis.core.RedisTemplate; 17 import org.springframework.data.redis.core.RedisTemplate;
  18 +import org.springframework.data.redis.core.StringRedisTemplate;
18 import org.springframework.data.redis.listener.ChannelTopic; 19 import org.springframework.data.redis.listener.ChannelTopic;
19 import org.springframework.data.redis.listener.RedisMessageListenerContainer; 20 import org.springframework.data.redis.listener.RedisMessageListenerContainer;
20 import org.springframework.data.redis.stream.StreamMessageListenerContainer; 21 import org.springframework.data.redis.stream.StreamMessageListenerContainer;
@@ -31,6 +32,13 @@ import java.util.List; @@ -31,6 +32,13 @@ import java.util.List;
31 @Slf4j 32 @Slf4j
32 public class YudaoMQAutoConfiguration { 33 public class YudaoMQAutoConfiguration {
33 34
  35 + @Bean
  36 + public RedisMQTemplate redisMQTemplate(StringRedisTemplate stringRedisTemplate) {
  37 + return new RedisMQTemplate(stringRedisTemplate);
  38 + }
  39 +
  40 + // ========== 消费者相关 ==========
  41 +
34 /** 42 /**
35 * 创建 Redis Pub/Sub 广播消费的容器 43 * 创建 Redis Pub/Sub 广播消费的容器
36 */ 44 */
@@ -71,7 +79,6 @@ public class YudaoMQAutoConfiguration { @@ -71,7 +79,6 @@ public class YudaoMQAutoConfiguration {
71 79
72 // 第二步,注册监听器,消费对应的 Stream 主题 80 // 第二步,注册监听器,消费对应的 Stream 主题
73 String consumerName = buildConsumerName(); 81 String consumerName = buildConsumerName();
74 -// String consumerName = "110";  
75 listeners.forEach(listener -> { 82 listeners.forEach(listener -> {
76 // 创建 listener 对应的消费者分组 83 // 创建 listener 对应的消费者分组
77 try { 84 try {
yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/util/RedisMessageUtils.java renamed to yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/RedisMQTemplate.java
1 -package cn.iocoder.yudao.framework.mq.core.util; 1 +package cn.iocoder.yudao.framework.mq.core;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.pubsub.ChannelMessage;  
4 -import cn.iocoder.yudao.framework.mq.core.stream.StreamMessage;  
5 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 3 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
  4 +import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessage;
  5 +import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage;
  6 +import lombok.AllArgsConstructor;
6 import org.springframework.data.redis.connection.stream.RecordId; 7 import org.springframework.data.redis.connection.stream.RecordId;
7 import org.springframework.data.redis.connection.stream.StreamRecords; 8 import org.springframework.data.redis.connection.stream.StreamRecords;
8 import org.springframework.data.redis.core.RedisTemplate; 9 import org.springframework.data.redis.core.RedisTemplate;
9 10
10 /** 11 /**
11 - * Redis 消息工具类 12 + * Redis MQ 操作模板类
12 * 13 *
13 * @author 芋道源码 14 * @author 芋道源码
14 */ 15 */
15 -public class RedisMessageUtils { 16 +@AllArgsConstructor
  17 +public class RedisMQTemplate {
  18 +
  19 + private final RedisTemplate<String, ?> redisTemplate;
16 20
17 /** 21 /**
18 * 发送 Redis 消息,基于 Redis pub/sub 实现 22 * 发送 Redis 消息,基于 Redis pub/sub 实现
19 * 23 *
20 - * @param redisTemplate Redis 操作模板  
21 * @param message 消息 24 * @param message 消息
22 */ 25 */
23 - public static <T extends ChannelMessage> void sendChannelMessage(RedisTemplate<?, ?> redisTemplate, T message) { 26 + public <T extends AbstractChannelMessage> void send(T message) {
24 redisTemplate.convertAndSend(message.getChannel(), JsonUtils.toJsonString(message)); 27 redisTemplate.convertAndSend(message.getChannel(), JsonUtils.toJsonString(message));
25 } 28 }
26 29
27 /** 30 /**
28 * 发送 Redis 消息,基于 Redis Stream 实现 31 * 发送 Redis 消息,基于 Redis Stream 实现
29 * 32 *
30 - * @param redisTemplate Redis 操作模板  
31 * @param message 消息 33 * @param message 消息
32 * @return 消息记录的编号对象 34 * @return 消息记录的编号对象
33 */ 35 */
34 - public static <T extends StreamMessage> RecordId sendStreamMessage(RedisTemplate<String, ?> redisTemplate, T message) { 36 + public <T extends AbstractStreamMessage> RecordId send(T message) {
35 return redisTemplate.opsForStream().add(StreamRecords.newRecord() 37 return redisTemplate.opsForStream().add(StreamRecords.newRecord()
36 .ofObject(JsonUtils.toJsonString(message)) // 设置内容 38 .ofObject(JsonUtils.toJsonString(message)) // 设置内容
37 .withStreamKey(message.getStreamKey())); // 设置 stream key 39 .withStreamKey(message.getStreamKey())); // 设置 stream key
yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/message/AbstractRedisMessage.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.mq.core.message;
  2 +
  3 +import java.util.HashMap;
  4 +import java.util.Map;
  5 +
  6 +/**
  7 + * Redis 消息抽象基类
  8 + *
  9 + * @author 芋道源码
  10 + */
  11 +public abstract class AbstractRedisMessage {
  12 +
  13 + /**
  14 + * 头
  15 + */
  16 + private final Map<String, String> headers = new HashMap<>();
  17 +
  18 + public String getHeader(String key) {
  19 + return headers.get(key);
  20 + }
  21 +
  22 + public void addHeader(String key, String value) {
  23 + headers.put(key, value);
  24 + }
  25 +
  26 +}
yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/pubsub/ChannelMessage.java renamed to yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/pubsub/AbstractChannelMessage.java
1 package cn.iocoder.yudao.framework.mq.core.pubsub; 1 package cn.iocoder.yudao.framework.mq.core.pubsub;
2 2
  3 +import cn.iocoder.yudao.framework.mq.core.message.AbstractRedisMessage;
3 import com.fasterxml.jackson.annotation.JsonIgnore; 4 import com.fasterxml.jackson.annotation.JsonIgnore;
4 5
5 /** 6 /**
6 - * Redis Channel Message 接口 7 + * Redis Channel Message 抽象类
7 * 8 *
8 * @author 芋道源码 9 * @author 芋道源码
9 */ 10 */
10 -public interface ChannelMessage { 11 +public abstract class AbstractChannelMessage extends AbstractRedisMessage {
11 12
12 /** 13 /**
13 * 获得 Redis Channel 14 * 获得 Redis Channel
@@ -15,6 +16,6 @@ public interface ChannelMessage { @@ -15,6 +16,6 @@ public interface ChannelMessage {
15 * @return Channel 16 * @return Channel
16 */ 17 */
17 @JsonIgnore // 避免序列化 18 @JsonIgnore // 避免序列化
18 - String getChannel(); 19 + public abstract String getChannel();
19 20
20 } 21 }
yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/pubsub/AbstractChannelMessageListener.java
@@ -15,7 +15,7 @@ import java.lang.reflect.Type; @@ -15,7 +15,7 @@ import java.lang.reflect.Type;
15 * 15 *
16 * @author 芋道源码 16 * @author 芋道源码
17 */ 17 */
18 -public abstract class AbstractChannelMessageListener<T extends ChannelMessage> implements MessageListener { 18 +public abstract class AbstractChannelMessageListener<T extends AbstractChannelMessage> implements MessageListener {
19 19
20 /** 20 /**
21 * 消息类型 21 * 消息类型
yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/stream/StreamMessage.java renamed to yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/stream/AbstractStreamMessage.java
@@ -3,11 +3,11 @@ package cn.iocoder.yudao.framework.mq.core.stream; @@ -3,11 +3,11 @@ package cn.iocoder.yudao.framework.mq.core.stream;
3 import com.fasterxml.jackson.annotation.JsonIgnore; 3 import com.fasterxml.jackson.annotation.JsonIgnore;
4 4
5 /** 5 /**
6 - * Redis Stream Message 接口 6 + * Redis Stream Message 抽象类
7 * 7 *
8 * @author 芋道源码 8 * @author 芋道源码
9 */ 9 */
10 -public interface StreamMessage { 10 +public abstract class AbstractStreamMessage {
11 11
12 /** 12 /**
13 * 获得 Redis Stream Key 13 * 获得 Redis Stream Key
@@ -15,6 +15,6 @@ public interface StreamMessage { @@ -15,6 +15,6 @@ public interface StreamMessage {
15 * @return Channel 15 * @return Channel
16 */ 16 */
17 @JsonIgnore // 避免序列化 17 @JsonIgnore // 避免序列化
18 - String getStreamKey(); 18 + public abstract String getStreamKey();
19 19
20 } 20 }
yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/core/stream/AbstractStreamMessageListener.java
@@ -19,7 +19,7 @@ import java.lang.reflect.Type; @@ -19,7 +19,7 @@ import java.lang.reflect.Type;
19 * 19 *
20 * @author 芋道源码 20 * @author 芋道源码
21 */ 21 */
22 -public abstract class AbstractStreamMessageListener<T extends StreamMessage> 22 +public abstract class AbstractStreamMessageListener<T extends AbstractStreamMessage>
23 implements StreamListener<String, ObjectRecord<String, String>> { 23 implements StreamListener<String, ObjectRecord<String, String>> {
24 24
25 /** 25 /**
@@ -39,7 +39,7 @@ public abstract class AbstractStreamMessageListener&lt;T extends StreamMessage&gt; @@ -39,7 +39,7 @@ public abstract class AbstractStreamMessageListener&lt;T extends StreamMessage&gt;
39 @Getter 39 @Getter
40 private String group; 40 private String group;
41 /** 41 /**
42 - * 42 + * RedisTemplate
43 */ 43 */
44 @Setter 44 @Setter
45 private RedisTemplate<String, ?> redisTemplate; 45 private RedisTemplate<String, ?> redisTemplate;
yudao-framework/yudao-spring-boot-starter-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/package-info.java
@@ -4,5 +4,11 @@ @@ -4,5 +4,11 @@
4 * 2. Web:请求 HTTP API 时,Header 带上 tenant-id 租户编号。 4 * 2. Web:请求 HTTP API 时,Header 带上 tenant-id 租户编号。
5 * 3. Job:在 JobHandler 执行任务时,会按照每个租户,都独立并行执行一次。 5 * 3. Job:在 JobHandler 执行任务时,会按照每个租户,都独立并行执行一次。
6 * 4. MQ:TODO 6 * 4. MQ:TODO
  7 + * 5. Async:异步需要保证 ThreadLocal 的传递性,通过使用阿里开源的 TransmittableThreadLocal 实现。相关的改造点,可见:
  8 + * 1)Spring Async:
  9 + * {@link cn.iocoder.yudao.framework.quartz.config.YudaoAsyncAutoConfiguration#threadPoolTaskExecutorBeanPostProcessor()}
  10 + * 2)Spring Security:
  11 + * TransmittableThreadLocalSecurityContextHolderStrategy
  12 + * 和 YudaoSecurityAutoConfiguration#securityContextHolderMethodInvokingFactoryBean() 方法
7 */ 13 */
8 package cn.iocoder.yudao.framework.tenant; 14 package cn.iocoder.yudao.framework.tenant;