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 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 4 import cn.iocoder.yudao.module.promotion.service.coupon.CouponService;
6 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.event.EventListener;
  7 +import org.springframework.scheduling.annotation.Async;
7 8 import org.springframework.stereotype.Component;
8 9  
9 10 import javax.annotation.Resource;
10 11  
11 12 /**
12   - * 针对 {@link UserCreateMessage} 的消费者
  13 + * 用户注册时,发送优惠劵的消费者,基 {@link MemberUserCreateMessage} 消息
13 14 *
14 15 * @author owen
15 16 */
16 17 @Component
17 18 @Slf4j
18   -public class UserCreateConsumer extends AbstractStreamMessageListener<UserCreateMessage> {
  19 +public class CouponTakeByRegisterConsumer {
19 20  
20 21 @Resource
21 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 27 log.info("[onMessage][消息内容({})]", message);
26 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 3 import lombok.Data;
5   -import lombok.EqualsAndHashCode;
6 4  
7 5 import javax.validation.constraints.NotNull;
8 6  
... ... @@ -12,8 +10,7 @@ import javax.validation.constraints.NotNull;
12 10 * @author owen
13 11 */
14 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 18 @NotNull(message = "用户编号不能为空")
22 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 4 tenant-id: {{appTenentId}}
5 5  
6 6 {
7   - "mobile": "15601691300",
  7 + "mobile": "15601691388",
8 8 "password": "admin123"
9 9 }
10 10  
... ... @@ -14,7 +14,7 @@ Content-Type: application/json
14 14 tenant-id: {{appTenentId}}
15 15  
16 16 {
17   - "mobile": "15601691399",
  17 + "mobile": "15601691388",
18 18 "scene": 1
19 19 }
20 20  
... ... @@ -22,9 +22,10 @@ tenant-id: {{appTenentId}}
22 22 POST {{appApi}}/member/auth/sms-login
23 23 Content-Type: application/json
24 24 tenant-id: {{appTenentId}}
  25 +terminal: 30
25 26  
26 27 {
27   - "mobile": "15601691301",
  28 + "mobile": "15601691388",
28 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 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 4 import lombok.extern.slf4j.Slf4j;
  5 +import org.springframework.context.ApplicationContext;
6 6 import org.springframework.stereotype.Component;
7 7  
8 8 import javax.annotation.Resource;
... ... @@ -17,7 +17,7 @@ import javax.annotation.Resource;
17 17 public class MemberUserProducer {
18 18  
19 19 @Resource
20   - private RedisMQTemplate redisMQTemplate;
  20 + private ApplicationContext applicationContext;
21 21  
22 22 /**
23 23 * 发送 {@link MemberUserCreateMessage} 消息
... ... @@ -25,7 +25,7 @@ public class MemberUserProducer {
25 25 * @param userId 用户编号
26 26 */
27 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 6  
7 7 {
8 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 1 package cn.iocoder.yudao.module.system.mq.consumer.mail;
2 2  
3   -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;
4 3 import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
5   -import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
6 4 import cn.iocoder.yudao.module.system.service.mail.MailSendService;
7 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.event.EventListener;
  7 +import org.springframework.scheduling.annotation.Async;
8 8 import org.springframework.stereotype.Component;
9 9  
10 10 import javax.annotation.Resource;
... ... @@ -16,12 +16,13 @@ import javax.annotation.Resource;
16 16 */
17 17 @Component
18 18 @Slf4j
19   -public class MailSendConsumer extends AbstractStreamMessageListener<MailSendMessage> {
  19 +public class MailSendConsumer {
20 20  
21 21 @Resource
22 22 private MailSendService mailSendService;
23 23  
24   - @Override
  24 + @EventListener
  25 + @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
25 26 public void onMessage(MailSendMessage message) {
26 27 log.info("[onMessage][消息内容({})]", message);
27 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 2  
3 3 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
4 4 import cn.iocoder.yudao.module.system.service.sms.SmsSendService;
5   -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessageListener;
6 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.event.EventListener;
  7 +import org.springframework.scheduling.annotation.Async;
7 8 import org.springframework.stereotype.Component;
8 9  
9 10 import javax.annotation.Resource;
... ... @@ -15,12 +16,13 @@ import javax.annotation.Resource;
15 16 */
16 17 @Component
17 18 @Slf4j
18   -public class SmsSendConsumer extends AbstractStreamMessageListener<SmsSendMessage> {
  19 +public class SmsSendConsumer {
19 20  
20 21 @Resource
21 22 private SmsSendService smsSendService;
22 23  
23   - @Override
  24 + @EventListener
  25 + @Async // Spring Event 默认在 Producer 发送的线程,通过 @Async 实现异步
24 26 public void onMessage(SmsSendMessage message) {
25 27 log.info("[onMessage][消息内容({})]", message);
26 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 1 package cn.iocoder.yudao.module.system.mq.message.mail;
2 2  
3   -import cn.iocoder.yudao.framework.mq.core.stream.AbstractStreamMessage;
4 3 import lombok.Data;
5   -import lombok.EqualsAndHashCode;
6 4  
7 5 import javax.validation.constraints.NotEmpty;
8 6 import javax.validation.constraints.NotNull;
... ... @@ -13,8 +11,7 @@ import javax.validation.constraints.NotNull;
13 11 * @author 芋道源码
14 12 */
15 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 44 @NotEmpty(message = "邮件内容不能为空")
48 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 1 package cn.iocoder.yudao.module.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.AbstractStreamMessage;
5 4 import lombok.Data;
6   -import lombok.EqualsAndHashCode;
7 5  
8 6 import javax.validation.constraints.NotNull;
9 7 import java.util.List;
... ... @@ -14,8 +12,7 @@ import java.util.List;
14 12 * @author 芋道源码
15 13 */
16 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 39 */
43 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 1 package cn.iocoder.yudao.module.system.mq.producer.mail;
2 2  
3   -import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
4 3 import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
5 4 import lombok.extern.slf4j.Slf4j;
  5 +import org.springframework.context.ApplicationContext;
6 6 import org.springframework.stereotype.Component;
7 7  
8 8 import javax.annotation.Resource;
... ... @@ -18,7 +18,7 @@ import javax.annotation.Resource;
18 18 public class MailProducer {
19 19  
20 20 @Resource
21   - private RedisMQTemplate redisMQTemplate;
  21 + private ApplicationContext applicationContext;
22 22  
23 23 /**
24 24 * 发送 {@link MailSendMessage} 消息
... ... @@ -35,7 +35,7 @@ public class MailProducer {
35 35 MailSendMessage message = new MailSendMessage()
36 36 .setLogId(sendLogId).setMail(mail).setAccountId(accountId)
37 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 1 package cn.iocoder.yudao.module.system.mq.producer.sms;
2 2  
3 3 import cn.iocoder.yudao.framework.common.core.KeyValue;
4   -import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
5 4 import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
6 5 import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.context.ApplicationContext;
7 7 import org.springframework.stereotype.Component;
8 8  
9 9 import javax.annotation.Resource;
... ... @@ -20,7 +20,7 @@ import java.util.List;
20 20 public class SmsProducer {
21 21  
22 22 @Resource
23   - private RedisMQTemplate redisMQTemplate;
  23 + private ApplicationContext applicationContext;
24 24  
25 25 /**
26 26 * 发送 {@link SmsSendMessage} 消息
... ... @@ -35,7 +35,7 @@ public class SmsProducer {
35 35 Long channelId, String apiTemplateId, List<KeyValue<String, Object>> templateParams) {
36 36 SmsSendMessage message = new SmsSendMessage().setLogId(logId).setMobile(mobile);
37 37 message.setChannelId(channelId).setApiTemplateId(apiTemplateId).setTemplateParams(templateParams);
38   - redisMQTemplate.send(message);
  38 + applicationContext.publishEvent(message);
39 39 }
40 40  
41 41 }
... ...