ruoyi-vue-pro短信发送

498 阅读2分钟

根据教程将redis的消息队列配置好。 消息队列 | ruoyi-vue-pro 开发指南 (iocoder.cn)

1、发送时需要填入短信日志编号,手机号,渠道编号,短信模板编号,短信模板参数

image.png

image.png

image.png 这是一个Java方法,名为doSendSms,它接受一个SmsSendMessage类型的参数,并用于发送短信。首先,它从smsClientFactory中获取一个与指定渠道ID对应的SmsClient客户端。然后,它使用smsClient对象发送短信。最后,它将发送结果更新到smsLogService中。每次发送都会存储一条短信发送日志。

2、初始化渠道数据

image.png

image.png @PostConstruct的解释:在Spring框架中,@PostConstruct@Autowired@Inject一起使用,用于自动注入依赖项并在构造函数完成后执行初始化操作。当Spring容器创建一个类的实例并完成依赖注入后,它会检查是否有使用@PostConstruct注解的方法,如果有,Spring将自动调用这些方法。

@PostConstruct是一个Java注解,用于标记一个方法,该方法将在依赖注入完成后,但在类实例化之前被调用。这个注解通常用于执行一些初始化操作,如设置默认值、初始化数据结构或执行其他必要的配置。

第一步:查询短信渠道数据,实体对象为SmsChannelDo

image.png 第二步:将查询出的短信渠道对象转换为SmsChannelProperties对象并存入缓存中

3、获取渠道号对应的短信客户端

image.png

image.png image.png

4、最终的短信发送操作

image.png image.png

image.png doSendSms一共有3个实现方法 image.png

阿里短信客户端

image.png image.png

image.png 这里涉及到函数式编程参考: Java函数式编程(一)–Function的使用_java function_boyn博言的博客-CSDN博客 简单来说就是将函数作为参数,然后在方法中使用xxx.apply调用这个函数apply内的参数就是传入函数的参数。

腾讯短信客户端

image.png image.png 这里invoke的三个参数全是函数,this:doSendSms0是为了在lambda表达式中表示调用当前类的方法

image.png requesSupplier方法用来创建请求参数
responseSupplier用来发送请求
resultGen用来处理响应

短信发送Service

image.png

总结:为了考虑多种短信客户端使用了抽象类接口的方式统一方法。使用redis作为消息队列的方式进行异步短信发送。每次的创建和发送短信都会更新日志表。