【微服务】Staffjoy 项目源码解析(三)—— Mail 模块

一. 架构设计

在这里插入图片描述
Mail 模块与 SMS 模块的区别不大,都是简单的 MVC 前后端分离架构,我只对不同的地方进行讲解。

二. 代码分析

接口方面与 Sms 模块的区别在于,没有了头部的验证,直接将请求传过来即可。

    @PostMapping(path = "/send")
    BaseResponse send(@RequestBody @Valid EmailRequest request);

而数据对象方面,区别在于,虽然有目标地址,其他元素就不同了,包括,标题,主题,用户名。

    @NotBlank(message = "Please provide an email")
    private String to;
    @NotBlank(message = "Please provide a subject")
    private String subject;
    @NotBlank(message = "Please provide a valid body")
    @JsonProperty("html_body")
    private String htmlBody;
    private String name;

SVC 模块底层的 AppProps 也较为简单,只有阿里云登录使用的密钥等数据

    @NotNull private String aliyunAccessKey;
    @NotNull private String aliyunAccessSecret;

AppConfig 也是,生成一个 阿里云交互 的对象和一个异步线程池,没区别。代码不贴了。

Service 层的代码也相同。都是基于 阿里云模块封装好的对象进行操作,只不过一个是 sms,一个是mail

        SingleSendMailRequest mailRequest = new SingleSendMailRequest();
        mailRequest.setAccountName(MailConstant.FROM);
        mailRequest.setFromAlias(MailConstant.FROM_NAME);
        mailRequest.setAddressType(1);
        mailRequest.setToAddress(req.getTo());
        mailRequest.setReplyToAddress(false);
        mailRequest.setSubject(req.getSubject());
        mailRequest.setHtmlBody(req.getHtmlBody());

最后再通过 AppConfig 方法建立的 阿里云交互对象发送邮件,得到返回值。

比较有意思的一点是使用了 Lambda 表达式穿件了一个日志了 Object 对象数组,存储邮件信息。

        IToLog logContext = () -> {
            return new Object[] {
                    "subject", req.getSubject(),
                    "to", req.getTo(),
                    "html_body", req.getHtmlBody()
            };
        };

最后是 Controller 层的 MailController 类。差别在于没有服务限制。 header 参数校验没了而已,代码不贴了。

三. 小关键点

也是个注解,上次忘记写了

@Async(AppConfig.ASYNC_EXECUTOR_NAME)

也是用于异步操作,与 AppConfig 中的异步线程池配套。
参数中的就是异步线程池的 Bean 配置的别名

@Bean(name=ASYNC_EXECUTOR_NAME)

另,在 Config 中其实是导入了 common-lib 模块中的整体配置。
节省了重复代码。

@Import(value = StaffjoyRestConfig.class)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值