Commit d29b0beb9b528c379c78407730221250cf11965f
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 | 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 | 4 | import lombok.Data; |
| 5 | 5 | |
| 6 | 6 | /** |
| 7 | 7 | * 配置数据刷新 Message |
| 8 | 8 | */ |
| 9 | 9 | @Data |
| 10 | -public class InfConfigRefreshMessage implements ChannelMessage { | |
| 10 | +public class InfConfigRefreshMessage extends AbstractChannelMessage { | |
| 11 | 11 | |
| 12 | 12 | @Override |
| 13 | 13 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/infra/mq/producer/config/InfConfigProducer.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.infra.mq.producer.config; |
| 2 | 2 | |
| 3 | 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 | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 | |
| 8 | 7 | import javax.annotation.Resource; |
| ... | ... | @@ -14,14 +13,14 @@ import javax.annotation.Resource; |
| 14 | 13 | public class InfConfigProducer { |
| 15 | 14 | |
| 16 | 15 | @Resource |
| 17 | - private StringRedisTemplate stringRedisTemplate; | |
| 16 | + private RedisMQTemplate redisMQTemplate; | |
| 18 | 17 | |
| 19 | 18 | /** |
| 20 | 19 | * 发送 {@link InfConfigRefreshMessage} 消息 |
| 21 | 20 | */ |
| 22 | 21 | public void sendConfigRefreshMessage() { |
| 23 | 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 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | /** |
| 7 | 8 | * 部门数据刷新 Message |
| 9 | + * | |
| 10 | + * @author 芋道源码 | |
| 8 | 11 | */ |
| 9 | 12 | @Data |
| 10 | -public class SysDeptRefreshMessage implements ChannelMessage { | |
| 13 | +@EqualsAndHashCode(callSuper = true) | |
| 14 | +public class SysDeptRefreshMessage extends AbstractChannelMessage { | |
| 11 | 15 | |
| 12 | 16 | @Override |
| 13 | 17 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/dict/SysDictDataRefreshMessage.java
| 1 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | /** |
| 7 | 8 | * 字典数据数据刷新 Message |
| 8 | 9 | */ |
| 9 | 10 | @Data |
| 10 | -public class SysDictDataRefreshMessage implements ChannelMessage { | |
| 11 | +@EqualsAndHashCode(callSuper = true) | |
| 12 | +public class SysDictDataRefreshMessage extends AbstractChannelMessage { | |
| 11 | 13 | |
| 12 | 14 | @Override |
| 13 | 15 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/mail/SysMailSendMessage.java
| 1 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | import javax.validation.constraints.NotNull; |
| 7 | 8 | import java.util.Map; |
| ... | ... | @@ -12,7 +13,8 @@ import java.util.Map; |
| 12 | 13 | * @author 芋道源码 |
| 13 | 14 | */ |
| 14 | 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 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | /** |
| 7 | 8 | * 菜单数据刷新 Message |
| 9 | + * | |
| 10 | + * @author 芋道源码 | |
| 8 | 11 | */ |
| 9 | 12 | @Data |
| 10 | -public class SysMenuRefreshMessage implements ChannelMessage { | |
| 13 | +@EqualsAndHashCode(callSuper = true) | |
| 14 | +public class SysMenuRefreshMessage extends AbstractChannelMessage { | |
| 11 | 15 | |
| 12 | 16 | @Override |
| 13 | 17 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleMenuRefreshMessage.java
| 1 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | /** |
| 7 | 8 | * 角色与菜单数据刷新 Message |
| 9 | + * | |
| 10 | + * @author 芋道源码 | |
| 8 | 11 | */ |
| 9 | 12 | @Data |
| 10 | -public class SysRoleMenuRefreshMessage implements ChannelMessage { | |
| 13 | +@EqualsAndHashCode(callSuper = true) | |
| 14 | +public class SysRoleMenuRefreshMessage extends AbstractChannelMessage { | |
| 11 | 15 | |
| 12 | 16 | @Override |
| 13 | 17 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/permission/SysRoleRefreshMessage.java
| 1 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | /** |
| 7 | 8 | * 角色数据刷新 Message |
| 9 | + * | |
| 10 | + * @author 芋道源码 | |
| 8 | 11 | */ |
| 9 | 12 | @Data |
| 10 | -public class SysRoleRefreshMessage implements ChannelMessage { | |
| 13 | +@EqualsAndHashCode(callSuper = true) | |
| 14 | +public class SysRoleRefreshMessage extends AbstractChannelMessage { | |
| 11 | 15 | |
| 12 | 16 | @Override |
| 13 | 17 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsChannelRefreshMessage.java
| 1 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | /** |
| 7 | 8 | * 短信渠道的数据刷新 Message |
| 9 | + * | |
| 10 | + * @author 芋道源码 | |
| 8 | 11 | */ |
| 9 | 12 | @Data |
| 10 | -public class SysSmsChannelRefreshMessage implements ChannelMessage { | |
| 13 | +@EqualsAndHashCode(callSuper = true) | |
| 14 | +public class SysSmsChannelRefreshMessage extends AbstractChannelMessage { | |
| 11 | 15 | |
| 12 | 16 | @Override |
| 13 | 17 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/message/sms/SysSmsTemplateRefreshMessage.java
| 1 | 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 | 4 | import lombok.Data; |
| 5 | +import lombok.EqualsAndHashCode; | |
| 5 | 6 | |
| 6 | 7 | /** |
| 7 | 8 | * 短信模板的数据刷新 Message |
| 9 | + * | |
| 10 | + * @author 芋道源码 | |
| 8 | 11 | */ |
| 9 | 12 | @Data |
| 10 | -public class SysSmsTemplateRefreshMessage implements ChannelMessage { | |
| 13 | +@EqualsAndHashCode(callSuper = true) | |
| 14 | +public class SysSmsTemplateRefreshMessage extends AbstractChannelMessage { | |
| 11 | 15 | |
| 12 | 16 | @Override |
| 13 | 17 | public String getChannel() { | ... | ... |
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/mq/producer/dept/SysDeptProducer.java
| 1 | 1 | package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dept; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; | |
| 4 | 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 | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 | |
| 8 | 7 | import javax.annotation.Resource; |
| ... | ... | @@ -14,14 +13,14 @@ import javax.annotation.Resource; |
| 14 | 13 | public class SysDeptProducer { |
| 15 | 14 | |
| 16 | 15 | @Resource |
| 17 | - private StringRedisTemplate stringRedisTemplate; | |
| 16 | + private RedisMQTemplate redisMQTemplate; | |
| 18 | 17 | |
| 19 | 18 | /** |
| 20 | 19 | * 发送 {@link SysDeptRefreshMessage} 消息 |
| 21 | 20 | */ |
| 22 | 21 | public void sendDeptRefreshMessage() { |
| 23 | 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 | 1 | package cn.iocoder.yudao.adminserver.modules.system.mq.producer.dict; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; | |
| 4 | 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 | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 | |
| 8 | 7 | import javax.annotation.Resource; |
| ... | ... | @@ -14,14 +13,14 @@ import javax.annotation.Resource; |
| 14 | 13 | public class SysDictDataProducer { |
| 15 | 14 | |
| 16 | 15 | @Resource |
| 17 | - private StringRedisTemplate stringRedisTemplate; | |
| 16 | + private RedisMQTemplate redisMQTemplate; | |
| 18 | 17 | |
| 19 | 18 | /** |
| 20 | 19 | * 发送 {@link SysDictDataRefreshMessage} 消息 |
| 21 | 20 | */ |
| 22 | 21 | public void sendDictDataRefreshMessage() { |
| 23 | 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 | 1 | package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; | |
| 4 | 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 | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 | |
| 8 | 7 | import javax.annotation.Resource; |
| ... | ... | @@ -14,14 +13,14 @@ import javax.annotation.Resource; |
| 14 | 13 | public class SysMenuProducer { |
| 15 | 14 | |
| 16 | 15 | @Resource |
| 17 | - private StringRedisTemplate stringRedisTemplate; | |
| 16 | + private RedisMQTemplate redisMQTemplate; | |
| 18 | 17 | |
| 19 | 18 | /** |
| 20 | 19 | * 发送 {@link SysMenuRefreshMessage} 消息 |
| 21 | 20 | */ |
| 22 | 21 | public void sendMenuRefreshMessage() { |
| 23 | 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 | 1 | package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; | |
| 4 | 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 | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 | |
| 8 | 7 | import javax.annotation.Resource; |
| ... | ... | @@ -14,14 +13,14 @@ import javax.annotation.Resource; |
| 14 | 13 | public class SysPermissionProducer { |
| 15 | 14 | |
| 16 | 15 | @Resource |
| 17 | - private StringRedisTemplate stringRedisTemplate; | |
| 16 | + private RedisMQTemplate redisMQTemplate; | |
| 18 | 17 | |
| 19 | 18 | /** |
| 20 | 19 | * 发送 {@link SysRoleMenuRefreshMessage} 消息 |
| 21 | 20 | */ |
| 22 | 21 | public void sendRoleMenuRefreshMessage() { |
| 23 | 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 | 1 | package cn.iocoder.yudao.adminserver.modules.system.mq.producer.permission; |
| 2 | 2 | |
| 3 | -import cn.iocoder.yudao.framework.mq.core.util.RedisMessageUtils; | |
| 4 | 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 | 5 | import org.springframework.stereotype.Component; |
| 7 | 6 | |
| 8 | 7 | import javax.annotation.Resource; |
| ... | ... | @@ -16,14 +15,14 @@ import javax.annotation.Resource; |
| 16 | 15 | public class SysRoleProducer { |
| 17 | 16 | |
| 18 | 17 | @Resource |
| 19 | - private StringRedisTemplate stringRedisTemplate; | |
| 18 | + private RedisMQTemplate redisMQTemplate; | |
| 20 | 19 | |
| 21 | 20 | /** |
| 22 | 21 | * 发送 {@link SysRoleRefreshMessage} 消息 |
| 23 | 22 | */ |
| 24 | 23 | public void sendRoleRefreshMessage() { |
| 25 | 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 | 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 | 3 | import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsChannelRefreshMessage; |
| 6 | 4 | import cn.iocoder.yudao.adminserver.modules.system.mq.message.sms.SysSmsTemplateRefreshMessage; |
| 5 | +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; | |
| 7 | 6 | import lombok.extern.slf4j.Slf4j; |
| 8 | -import org.springframework.data.redis.core.StringRedisTemplate; | |
| 9 | 7 | import org.springframework.stereotype.Component; |
| 10 | 8 | |
| 11 | 9 | import javax.annotation.Resource; |
| 12 | -import java.util.List; | |
| 13 | 10 | |
| 14 | 11 | /** |
| 15 | 12 | * Sms 短信相关消息的 Producer |
| ... | ... | @@ -22,14 +19,14 @@ import java.util.List; |
| 22 | 19 | public class SysSmsProducer { |
| 23 | 20 | |
| 24 | 21 | @Resource |
| 25 | - private StringRedisTemplate stringRedisTemplate; | |
| 22 | + private RedisMQTemplate redisMQTemplate; | |
| 26 | 23 | |
| 27 | 24 | /** |
| 28 | 25 | * 发送 {@link SysSmsChannelRefreshMessage} 消息 |
| 29 | 26 | */ |
| 30 | 27 | public void sendSmsChannelRefreshMessage() { |
| 31 | 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 | 34 | */ |
| 38 | 35 | public void sendSmsTemplateRefreshMessage() { |
| 39 | 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 | 1 | package cn.iocoder.yudao.coreservice.modules.system.mq.message.sms; |
| 2 | 2 | |
| 3 | 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 | 5 | import lombok.Data; |
| 6 | +import lombok.EqualsAndHashCode; | |
| 6 | 7 | |
| 7 | 8 | import javax.validation.constraints.NotNull; |
| 8 | 9 | import java.util.List; |
| ... | ... | @@ -13,7 +14,8 @@ import java.util.List; |
| 13 | 14 | * @author 芋道源码 |
| 14 | 15 | */ |
| 15 | 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 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.coreservice.modules.system.mq.message.sms.SysSmsSendMessage; |
| 4 | 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 | 6 | import lombok.extern.slf4j.Slf4j; |
| 7 | -import org.springframework.data.redis.core.StringRedisTemplate; | |
| 8 | 7 | import org.springframework.stereotype.Component; |
| 9 | 8 | |
| 10 | 9 | import javax.annotation.Resource; |
| ... | ... | @@ -21,7 +20,7 @@ import java.util.List; |
| 21 | 20 | public class SysSmsCoreProducer { |
| 22 | 21 | |
| 23 | 22 | @Resource |
| 24 | - private StringRedisTemplate stringRedisTemplate; | |
| 23 | + private RedisMQTemplate redisMQTemplate; | |
| 25 | 24 | |
| 26 | 25 | /** |
| 27 | 26 | * 发送 {@link SysSmsSendMessage} 消息 |
| ... | ... | @@ -36,7 +35,7 @@ public class SysSmsCoreProducer { |
| 36 | 35 | Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) { |
| 37 | 36 | SysSmsSendMessage message = new SysSmsSendMessage().setLogId(logId).setMobile(mobile); |
| 38 | 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 | 1 | package cn.iocoder.yudao.framework.mq.config; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.system.SystemUtil; |
| 4 | +import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate; | |
| 4 | 5 | import cn.iocoder.yudao.framework.mq.core.pubsub.AbstractChannelMessageListener; |
| 5 | 6 | import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener; |
| 6 | 7 | import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; |
| 7 | 8 | import lombok.extern.slf4j.Slf4j; |
| 8 | 9 | import org.springframework.boot.autoconfigure.AutoConfigureAfter; |
| 9 | -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; | |
| 10 | 10 | import org.springframework.context.annotation.Bean; |
| 11 | 11 | import org.springframework.context.annotation.Configuration; |
| 12 | 12 | import org.springframework.data.redis.connection.RedisConnectionFactory; |
| ... | ... | @@ -15,6 +15,7 @@ import org.springframework.data.redis.connection.stream.ObjectRecord; |
| 15 | 15 | import org.springframework.data.redis.connection.stream.ReadOffset; |
| 16 | 16 | import org.springframework.data.redis.connection.stream.StreamOffset; |
| 17 | 17 | import org.springframework.data.redis.core.RedisTemplate; |
| 18 | +import org.springframework.data.redis.core.StringRedisTemplate; | |
| 18 | 19 | import org.springframework.data.redis.listener.ChannelTopic; |
| 19 | 20 | import org.springframework.data.redis.listener.RedisMessageListenerContainer; |
| 20 | 21 | import org.springframework.data.redis.stream.StreamMessageListenerContainer; |
| ... | ... | @@ -31,6 +32,13 @@ import java.util.List; |
| 31 | 32 | @Slf4j |
| 32 | 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 | 43 | * 创建 Redis Pub/Sub 广播消费的容器 |
| 36 | 44 | */ |
| ... | ... | @@ -71,7 +79,6 @@ public class YudaoMQAutoConfiguration { |
| 71 | 79 | |
| 72 | 80 | // 第二步,注册监听器,消费对应的 Stream 主题 |
| 73 | 81 | String consumerName = buildConsumerName(); |
| 74 | -// String consumerName = "110"; | |
| 75 | 82 | listeners.forEach(listener -> { |
| 76 | 83 | // 创建 listener 对应的消费者分组 |
| 77 | 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 | 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 | 7 | import org.springframework.data.redis.connection.stream.RecordId; |
| 7 | 8 | import org.springframework.data.redis.connection.stream.StreamRecords; |
| 8 | 9 | import org.springframework.data.redis.core.RedisTemplate; |
| 9 | 10 | |
| 10 | 11 | /** |
| 11 | - * Redis 消息工具类 | |
| 12 | + * Redis MQ 操作模板类 | |
| 12 | 13 | * |
| 13 | 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 | 22 | * 发送 Redis 消息,基于 Redis pub/sub 实现 |
| 19 | 23 | * |
| 20 | - * @param redisTemplate Redis 操作模板 | |
| 21 | 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 | 27 | redisTemplate.convertAndSend(message.getChannel(), JsonUtils.toJsonString(message)); |
| 25 | 28 | } |
| 26 | 29 | |
| 27 | 30 | /** |
| 28 | 31 | * 发送 Redis 消息,基于 Redis Stream 实现 |
| 29 | 32 | * |
| 30 | - * @param redisTemplate Redis 操作模板 | |
| 31 | 33 | * @param message 消息 |
| 32 | 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 | 37 | return redisTemplate.opsForStream().add(StreamRecords.newRecord() |
| 36 | 38 | .ofObject(JsonUtils.toJsonString(message)) // 设置内容 |
| 37 | 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 | 1 | package cn.iocoder.yudao.framework.mq.core.pubsub; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.mq.core.message.AbstractRedisMessage; | |
| 3 | 4 | import com.fasterxml.jackson.annotation.JsonIgnore; |
| 4 | 5 | |
| 5 | 6 | /** |
| 6 | - * Redis Channel Message 接口 | |
| 7 | + * Redis Channel Message 抽象类 | |
| 7 | 8 | * |
| 8 | 9 | * @author 芋道源码 |
| 9 | 10 | */ |
| 10 | -public interface ChannelMessage { | |
| 11 | +public abstract class AbstractChannelMessage extends AbstractRedisMessage { | |
| 11 | 12 | |
| 12 | 13 | /** |
| 13 | 14 | * 获得 Redis Channel |
| ... | ... | @@ -15,6 +16,6 @@ public interface ChannelMessage { |
| 15 | 16 | * @return Channel |
| 16 | 17 | */ |
| 17 | 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 | 15 | * |
| 16 | 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 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore; |
| 4 | 4 | |
| 5 | 5 | /** |
| 6 | - * Redis Stream Message 接口 | |
| 6 | + * Redis Stream Message 抽象类 | |
| 7 | 7 | * |
| 8 | 8 | * @author 芋道源码 |
| 9 | 9 | */ |
| 10 | -public interface StreamMessage { | |
| 10 | +public abstract class AbstractStreamMessage { | |
| 11 | 11 | |
| 12 | 12 | /** |
| 13 | 13 | * 获得 Redis Stream Key |
| ... | ... | @@ -15,6 +15,6 @@ public interface StreamMessage { |
| 15 | 15 | * @return Channel |
| 16 | 16 | */ |
| 17 | 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 | 19 | * |
| 20 | 20 | * @author 芋道源码 |
| 21 | 21 | */ |
| 22 | -public abstract class AbstractStreamMessageListener<T extends StreamMessage> | |
| 22 | +public abstract class AbstractStreamMessageListener<T extends AbstractStreamMessage> | |
| 23 | 23 | implements StreamListener<String, ObjectRecord<String, String>> { |
| 24 | 24 | |
| 25 | 25 | /** |
| ... | ... | @@ -39,7 +39,7 @@ public abstract class AbstractStreamMessageListener<T extends StreamMessage> |
| 39 | 39 | @Getter |
| 40 | 40 | private String group; |
| 41 | 41 | /** |
| 42 | - * | |
| 42 | + * RedisTemplate | |
| 43 | 43 | */ |
| 44 | 44 | @Setter |
| 45 | 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 | 4 | * 2. Web:请求 HTTP API 时,Header 带上 tenant-id 租户编号。 |
| 5 | 5 | * 3. Job:在 JobHandler 执行任务时,会按照每个租户,都独立并行执行一次。 |
| 6 | 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 | 14 | package cn.iocoder.yudao.framework.tenant; | ... | ... |