Commit d048daf7d6d8fc9bb6c061111f3a7590ffc28731

Authored by YunaiV
1 parent 87fb47ca

mq 重构:默认的 mq 实现,采用 event,减少对 redis、rocketmq 等消息队列的依赖

Showing 19 changed files with 68 additions and 87 deletions
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/consumer/coupon/UserCreateConsumer.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/consumer/coupon/CouponTakeByRegisterConsumer.java
1 package cn.iocoder.yudao.module.promotion.mq.consumer.coupon; 1 package cn.iocoder.yudao.module.promotion.mq.consumer.coupon;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;  
4 -import cn.iocoder.yudao.module.promotion.mq.message.coupon.UserCreateMessage; 3 +import cn.iocoder.yudao.module.member.message.user.MemberUserCreateMessage;
5 import cn.iocoder.yudao.module.promotion.service.coupon.CouponService; 4 import cn.iocoder.yudao.module.promotion.service.coupon.CouponService;
6 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.event.EventListener;
  7 +import org.springframework.scheduling.annotation.Async;
7 import org.springframework.stereotype.Component; 8 import org.springframework.stereotype.Component;
8 9
9 import javax.annotation.Resource; 10 import javax.annotation.Resource;
10 11
11 /** 12 /**
12 - * 针对 {@link UserCreateMessage} 的消费者 13 + * 用户注册时,发送优惠劵的消费者,基 {@link MemberUserCreateMessage} 消息
13 * 14 *
14 * @author owen 15 * @author owen
15 */ 16 */
16 @Component 17 @Component
17 @Slf4j 18 @Slf4j
18 -public class UserCreateConsumer extends AbstractStreamMessageListener<UserCreateMessage> { 19 +public class CouponTakeByRegisterConsumer {
19 20
20 @Resource 21 @Resource
21 private CouponService couponService; 22 private CouponService couponService;
22 23
23 - @Override  
24 - public void onMessage(UserCreateMessage message) { 24 + @EventListener
  25 + @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
  26 + public void onMessage(MemberUserCreateMessage message) {
25 log.info("[onMessage][消息内容({})]", message); 27 log.info("[onMessage][消息内容({})]", message);
26 couponService.takeCouponByRegister(message.getUserId()); 28 couponService.takeCouponByRegister(message.getUserId());
27 } 29 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/consumer/package-info.java 0 → 100644
  1 +/**
  2 + * 消息队列的消费者
  3 + */
  4 +package cn.iocoder.yudao.module.promotion.mq.consumer;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/message/package-info.java 0 → 100644
  1 +/**
  2 + * 消息队列的消息
  3 + */
  4 +package cn.iocoder.yudao.module.promotion.mq.message;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/producer/package-info.java 0 → 100644
  1 +/**
  2 + * 消息队列的生产者
  3 + */
  4 +package cn.iocoder.yudao.module.promotion.mq.producer;
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/message/package-info.java 0 → 100644
  1 +/**
  2 + * 消息队列的消息
  3 + */
  4 +package cn.iocoder.yudao.module.member.message;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/message/coupon/UserCreateMessage.java renamed to yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/message/user/MemberUserCreateMessage.java
1 -package cn.iocoder.yudao.module.promotion.mq.message.coupon; 1 +package cn.iocoder.yudao.module.member.message.user;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage;  
4 import lombok.Data; 3 import lombok.Data;
5 -import lombok.EqualsAndHashCode;  
6 4
7 import javax.validation.constraints.NotNull; 5 import javax.validation.constraints.NotNull;
8 6
@@ -12,8 +10,7 @@ import javax.validation.constraints.NotNull; @@ -12,8 +10,7 @@ import javax.validation.constraints.NotNull;
12 * @author owen 10 * @author owen
13 */ 11 */
14 @Data 12 @Data
15 -@EqualsAndHashCode(callSuper = true)  
16 -public class UserCreateMessage extends AbstractStreamMessage { 13 +public class MemberUserCreateMessage {
17 14
18 /** 15 /**
19 * 用户编号 16 * 用户编号
@@ -21,9 +18,4 @@ public class UserCreateMessage extends AbstractStreamMessage { @@ -21,9 +18,4 @@ public class UserCreateMessage extends AbstractStreamMessage {
21 @NotNull(message = "用户编号不能为空") 18 @NotNull(message = "用户编号不能为空")
22 private Long userId; 19 private Long userId;
23 20
24 - @Override  
25 - public String getStreamKey() {  
26 - return "member.user.create";  
27 - }  
28 -  
29 } 21 }
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http
@@ -4,7 +4,7 @@ Content-Type: application/json @@ -4,7 +4,7 @@ Content-Type: application/json
4 tenant-id: {{appTenentId}} 4 tenant-id: {{appTenentId}}
5 5
6 { 6 {
7 - "mobile": "15601691300", 7 + "mobile": "15601691388",
8 "password": "admin123" 8 "password": "admin123"
9 } 9 }
10 10
@@ -14,7 +14,7 @@ Content-Type: application/json @@ -14,7 +14,7 @@ Content-Type: application/json
14 tenant-id: {{appTenentId}} 14 tenant-id: {{appTenentId}}
15 15
16 { 16 {
17 - "mobile": "15601691399", 17 + "mobile": "15601691388",
18 "scene": 1 18 "scene": 1
19 } 19 }
20 20
@@ -22,9 +22,10 @@ tenant-id: {{appTenentId}} @@ -22,9 +22,10 @@ tenant-id: {{appTenentId}}
22 POST {{appApi}}/member/auth/sms-login 22 POST {{appApi}}/member/auth/sms-login
23 Content-Type: application/json 23 Content-Type: application/json
24 tenant-id: {{appTenentId}} 24 tenant-id: {{appTenentId}}
  25 +terminal: 30
25 26
26 { 27 {
27 - "mobile": "15601691301", 28 + "mobile": "15601691388",
28 "code": 9999 29 "code": 9999
29 } 30 }
30 31
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/consumer/package-info.java 0 → 100644
  1 +/**
  2 + * 消息队列的消费者
  3 + */
  4 +package cn.iocoder.yudao.module.member.mq.consumer;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/message/package-info.java 0 → 100644
  1 +/**
  2 + * 消息队列的消息
  3 + */
  4 +package cn.iocoder.yudao.module.member.mq.message;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/message/user/MemberUserCreateMessage.java deleted
1 -package cn.iocoder.yudao.module.member.mq.message.user;  
2 -  
3 -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage;  
4 -import lombok.Data;  
5 -import lombok.EqualsAndHashCode;  
6 -  
7 -import javax.validation.constraints.NotNull;  
8 -  
9 -/**  
10 - * 会员用户创建消息  
11 - *  
12 - * @author owen  
13 - */  
14 -@Data  
15 -@EqualsAndHashCode(callSuper = true)  
16 -public class MemberUserCreateMessage extends AbstractStreamMessage {  
17 -  
18 - /**  
19 - * 用户编号  
20 - */  
21 - @NotNull(message = "用户编号不能为空")  
22 - private Long userId;  
23 -  
24 - @Override  
25 - public String getStreamKey() {  
26 - return "member.user.create";  
27 - }  
28 -  
29 -}  
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/producer/package-info.java 0 → 100644
  1 +/**
  2 + * 消息队列的生产者
  3 + */
  4 +package cn.iocoder.yudao.module.member.mq.producer;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/producer/user/MemberUserProducer.java
1 package cn.iocoder.yudao.module.member.mq.producer.user; 1 package cn.iocoder.yudao.module.member.mq.producer.user;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;  
4 -import cn.iocoder.yudao.module.member.mq.message.user.MemberUserCreateMessage; 3 +import cn.iocoder.yudao.module.member.message.user.MemberUserCreateMessage;
5 import lombok.extern.slf4j.Slf4j; 4 import lombok.extern.slf4j.Slf4j;
  5 +import org.springframework.context.ApplicationContext;
6 import org.springframework.stereotype.Component; 6 import org.springframework.stereotype.Component;
7 7
8 import javax.annotation.Resource; 8 import javax.annotation.Resource;
@@ -17,7 +17,7 @@ import javax.annotation.Resource; @@ -17,7 +17,7 @@ import javax.annotation.Resource;
17 public class MemberUserProducer { 17 public class MemberUserProducer {
18 18
19 @Resource 19 @Resource
20 - private RedisMQTemplate redisMQTemplate; 20 + private ApplicationContext applicationContext;
21 21
22 /** 22 /**
23 * 发送 {@link MemberUserCreateMessage} 消息 23 * 发送 {@link MemberUserCreateMessage} 消息
@@ -25,7 +25,7 @@ public class MemberUserProducer { @@ -25,7 +25,7 @@ public class MemberUserProducer {
25 * @param userId 用户编号 25 * @param userId 用户编号
26 */ 26 */
27 public void sendUserCreateMessage(Long userId) { 27 public void sendUserCreateMessage(Long userId) {
28 - redisMQTemplate.send(new MemberUserCreateMessage().setUserId(userId)); 28 + applicationContext.publishEvent(new MemberUserCreateMessage().setUserId(userId));
29 } 29 }
30 30
31 } 31 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.http
@@ -6,9 +6,9 @@ tenant-id: {{adminTenentId}} @@ -6,9 +6,9 @@ tenant-id: {{adminTenentId}}
6 6
7 { 7 {
8 "templateCode": "test_01", 8 "templateCode": "test_01",
9 - "mobile": "156016913900",  
10 - "params": {  
11 - "key01": "value01",  
12 - "key02": "value02" 9 + "mobile": "15601691390",
  10 + "templateParams": {
  11 + "operation": "value01",
  12 + "code": "value02"
13 } 13 }
14 } 14 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/mail/MailSendConsumer.java
1 package cn.iocoder.yudao.module.system.mq.consumer.mail; 1 package cn.iocoder.yudao.module.system.mq.consumer.mail;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;  
4 import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage; 3 import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
5 -import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;  
6 import cn.iocoder.yudao.module.system.service.mail.MailSendService; 4 import cn.iocoder.yudao.module.system.service.mail.MailSendService;
7 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.event.EventListener;
  7 +import org.springframework.scheduling.annotation.Async;
8 import org.springframework.stereotype.Component; 8 import org.springframework.stereotype.Component;
9 9
10 import javax.annotation.Resource; 10 import javax.annotation.Resource;
@@ -16,12 +16,13 @@ import javax.annotation.Resource; @@ -16,12 +16,13 @@ import javax.annotation.Resource;
16 */ 16 */
17 @Component 17 @Component
18 @Slf4j 18 @Slf4j
19 -public class MailSendConsumer extends AbstractStreamMessageListener<MailSendMessage> { 19 +public class MailSendConsumer {
20 20
21 @Resource 21 @Resource
22 private MailSendService mailSendService; 22 private MailSendService mailSendService;
23 23
24 - @Override 24 + @EventListener
  25 + @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
25 public void onMessage(MailSendMessage message) { 26 public void onMessage(MailSendMessage message) {
26 log.info("[onMessage][消息内容({})]", message); 27 log.info("[onMessage][消息内容({})]", message);
27 mailSendService.doSendMail(message); 28 mailSendService.doSendMail(message);
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/consumer/sms/SmsSendConsumer.java
@@ -2,8 +2,9 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms; @@ -2,8 +2,9 @@ package cn.iocoder.yudao.module.system.mq.consumer.sms;
2 2
3 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; 3 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
4 import cn.iocoder.yudao.module.system.service.sms.SmsSendService; 4 import cn.iocoder.yudao.module.system.service.sms.SmsSendService;
5 -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;  
6 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.event.EventListener;
  7 +import org.springframework.scheduling.annotation.Async;
7 import org.springframework.stereotype.Component; 8 import org.springframework.stereotype.Component;
8 9
9 import javax.annotation.Resource; 10 import javax.annotation.Resource;
@@ -15,12 +16,13 @@ import javax.annotation.Resource; @@ -15,12 +16,13 @@ import javax.annotation.Resource;
15 */ 16 */
16 @Component 17 @Component
17 @Slf4j 18 @Slf4j
18 -public class SmsSendConsumer extends AbstractStreamMessageListener<SmsSendMessage> { 19 +public class SmsSendConsumer {
19 20
20 @Resource 21 @Resource
21 private SmsSendService smsSendService; 22 private SmsSendService smsSendService;
22 23
23 - @Override 24 + @EventListener
  25 + @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
24 public void onMessage(SmsSendMessage message) { 26 public void onMessage(SmsSendMessage message) {
25 log.info("[onMessage][消息内容({})]", message); 27 log.info("[onMessage][消息内容({})]", message);
26 smsSendService.doSendSms(message); 28 smsSendService.doSendSms(message);
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/message/mail/MailSendMessage.java
1 package cn.iocoder.yudao.module.system.mq.message.mail; 1 package cn.iocoder.yudao.module.system.mq.message.mail;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage;  
4 import lombok.Data; 3 import lombok.Data;
5 -import lombok.EqualsAndHashCode;  
6 4
7 import javax.validation.constraints.NotEmpty; 5 import javax.validation.constraints.NotEmpty;
8 import javax.validation.constraints.NotNull; 6 import javax.validation.constraints.NotNull;
@@ -13,8 +11,7 @@ import javax.validation.constraints.NotNull; @@ -13,8 +11,7 @@ import javax.validation.constraints.NotNull;
13 * @author 芋道源码 11 * @author 芋道源码
14 */ 12 */
15 @Data 13 @Data
16 -@EqualsAndHashCode(callSuper = true)  
17 -public class MailSendMessage extends AbstractStreamMessage { 14 +public class MailSendMessage {
18 15
19 /** 16 /**
20 * 邮件日志编号 17 * 邮件日志编号
@@ -47,9 +44,4 @@ public class MailSendMessage extends AbstractStreamMessage { @@ -47,9 +44,4 @@ public class MailSendMessage extends AbstractStreamMessage {
47 @NotEmpty(message = "邮件内容不能为空") 44 @NotEmpty(message = "邮件内容不能为空")
48 private String content; 45 private String content;
49 46
50 - @Override  
51 - public String getStreamKey() {  
52 - return "system.mail.send";  
53 - }  
54 -  
55 } 47 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/message/sms/SmsSendMessage.java
1 package cn.iocoder.yudao.module.system.mq.message.sms; 1 package cn.iocoder.yudao.module.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.AbstractStreamMessage;  
5 import lombok.Data; 4 import lombok.Data;
6 -import lombok.EqualsAndHashCode;  
7 5
8 import javax.validation.constraints.NotNull; 6 import javax.validation.constraints.NotNull;
9 import java.util.List; 7 import java.util.List;
@@ -14,8 +12,7 @@ import java.util.List; @@ -14,8 +12,7 @@ import java.util.List;
14 * @author 芋道源码 12 * @author 芋道源码
15 */ 13 */
16 @Data 14 @Data
17 -@EqualsAndHashCode(callSuper = true)  
18 -public class SmsSendMessage extends AbstractStreamMessage { 15 +public class SmsSendMessage {
19 16
20 /** 17 /**
21 * 短信日志编号 18 * 短信日志编号
@@ -42,9 +39,4 @@ public class SmsSendMessage extends AbstractStreamMessage { @@ -42,9 +39,4 @@ public class SmsSendMessage extends AbstractStreamMessage {
42 */ 39 */
43 private List<KeyValue<String, Object>> templateParams; 40 private List<KeyValue<String, Object>> templateParams;
44 41
45 - @Override  
46 - public String getStreamKey() {  
47 - return "system.sms.send";  
48 - }  
49 -  
50 } 42 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/producer/mail/MailProducer.java
1 package cn.iocoder.yudao.module.system.mq.producer.mail; 1 package cn.iocoder.yudao.module.system.mq.producer.mail;
2 2
3 -import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;  
4 import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage; 3 import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
5 import lombok.extern.slf4j.Slf4j; 4 import lombok.extern.slf4j.Slf4j;
  5 +import org.springframework.context.ApplicationContext;
6 import org.springframework.stereotype.Component; 6 import org.springframework.stereotype.Component;
7 7
8 import javax.annotation.Resource; 8 import javax.annotation.Resource;
@@ -18,7 +18,7 @@ import javax.annotation.Resource; @@ -18,7 +18,7 @@ import javax.annotation.Resource;
18 public class MailProducer { 18 public class MailProducer {
19 19
20 @Resource 20 @Resource
21 - private RedisMQTemplate redisMQTemplate; 21 + private ApplicationContext applicationContext;
22 22
23 /** 23 /**
24 * 发送 {@link MailSendMessage} 消息 24 * 发送 {@link MailSendMessage} 消息
@@ -35,7 +35,7 @@ public class MailProducer { @@ -35,7 +35,7 @@ public class MailProducer {
35 MailSendMessage message = new MailSendMessage() 35 MailSendMessage message = new MailSendMessage()
36 .setLogId(sendLogId).setMail(mail).setAccountId(accountId) 36 .setLogId(sendLogId).setMail(mail).setAccountId(accountId)
37 .setNickname(nickname).setTitle(title).setContent(content); 37 .setNickname(nickname).setTitle(title).setContent(content);
38 - redisMQTemplate.send(message); 38 + applicationContext.publishEvent(message);
39 } 39 }
40 40
41 } 41 }
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/mq/producer/sms/SmsProducer.java
1 package cn.iocoder.yudao.module.system.mq.producer.sms; 1 package cn.iocoder.yudao.module.system.mq.producer.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.RedisMQTemplate;  
5 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage; 4 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
6 import lombok.extern.slf4j.Slf4j; 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.ApplicationContext;
7 import org.springframework.stereotype.Component; 7 import org.springframework.stereotype.Component;
8 8
9 import javax.annotation.Resource; 9 import javax.annotation.Resource;
@@ -20,7 +20,7 @@ import java.util.List; @@ -20,7 +20,7 @@ import java.util.List;
20 public class SmsProducer { 20 public class SmsProducer {
21 21
22 @Resource 22 @Resource
23 - private RedisMQTemplate redisMQTemplate; 23 + private ApplicationContext applicationContext;
24 24
25 /** 25 /**
26 * 发送 {@link SmsSendMessage} 消息 26 * 发送 {@link SmsSendMessage} 消息
@@ -35,7 +35,7 @@ public class SmsProducer { @@ -35,7 +35,7 @@ public class SmsProducer {
35 Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) { 35 Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) {
36 SmsSendMessage message = new SmsSendMessage().setLogId(logId).setMobile(mobile); 36 SmsSendMessage message = new SmsSendMessage().setLogId(logId).setMobile(mobile);
37 message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams); 37 message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams);
38 - redisMQTemplate.send(message); 38 + applicationContext.publishEvent(message);
39 } 39 }
40 40
41 } 41 }