SpringBoot接入阿里SMS

本文涉及的产品
短信服务,200条 3个月
短信服务,100条 3个月
国际/港澳台短信套餐包,全球plus 100条 6个月
简介: 最近呢用到了短信服务,这次我使用的是阿里的SMS短信服务,就此对于SpringBoot接入短信服务来给大家简单的总结一下。因为也是用到了短信服务的开发工具包,所以接入起来也是非常简单方便的,下面一起来看看。
最近呢用到了短信服务,这次我使用的是阿里的SMS短信服务,就此对于SpringBoot接入短信服务来给大家简单的总结一下。因为也是用到了短信服务的开发工具包,所以接入起来也是非常简单方便的,下面一起来看看。

这次介绍的是SpringBoot接入SMS服务,阿里SMS对于Java的支持还是比较简单的,对于接入只需要一个开发工具包即可。

1.引入SMS依赖

SMS开发工具包这个里面封装了接入短信服务基本的东西,有了这个开发包接入短信服务就变的容易的许多,这块还是比较不错的。

<!-- sms -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-dysmsapi20170525</artifactId>
    <version>2.0.22</version>
</dependency>
2.application.yml配置短信密钥

这里的密钥正常来讲在短信服务平台开通了短信服务以后就可以拿到,自己可以去短信模块看一眼,这个是关键。

###############################################
######################sms######################
###############################################
aliyun:
  sms:
    access-key-id: xxxxxx
    access-key-secret: xxxxxx
3.SmsService服务实现

这是短信服务接入的主要步骤,这些在阿里短信平台的接入文档中也可以找到,具体的参数那里也比较详细,有需要的小伙伴可以自行翻阅,这里就直接弄过来简单的改一下。

package cn.youhaveme.service.impl;

import cn.hutool.json.JSONUtil;
import cn.youhaveme.service.SmsService;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponse;
import darabonba.core.client.ClientOverrideConfiguration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.concurrent.CompletableFuture;

@Service("smsService")
@Slf4j
public class SmsServiceImpl implements SmsService {

    @Value("${aliyun.sms.access-key-id}")
    private String accessKeyId;

    @Value("${aliyun.sms.access-key-secret}")
    private String accessKeySecret;

    @Override
    public void sendSms(String phoneNumber, String templateCode, String templateParam) {
        AsyncClient client = null;
        try {
            StaticCredentialProvider provider = StaticCredentialProvider.create(
                    Credential.builder()
                            .accessKeyId(accessKeyId)
                            .accessKeySecret(accessKeySecret)
                            .build());
            client = AsyncClient.builder()
                    .region("cn-hangzhou")
                    .credentialsProvider(provider)
                    .overrideConfiguration(ClientOverrideConfiguration.create()
                            .setEndpointOverride("dysmsapi.aliyuncs.com"))
                    .build();
            SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
                    // 模版签名
                    .signName("YouHaveMe")
                    .templateCode(templateCode)
                    .phoneNumbers(phoneNumber)
                    .templateParam(templateParam)
                    .build();
            CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
            SendSmsResponse sendSmsResponse = response.get();
            log.info(JSONUtil.toJsonStr(sendSmsResponse));
        } catch (Exception e) {
            log.error("短信服务发送异常", e);
        } finally {
            if (client != null) {
                client.close();
            }
        }
    }
}
4.SMS消费者

这里我没有通过Controller调用短信服务接口,我是通过消费Kafka的消息去发送短信的,直接通过接口调用也是一样的操作。

package cn.youhaveme.kafka.consumer;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.youhaveme.kafka.constant.TopicConst;
import cn.youhaveme.service.CodeTransferService;
import cn.youhaveme.service.SmsService;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.KafkaListener;


@Configuration
@Slf4j
public class SmsConsumer {

    @Autowired
    private SmsService smsService;
    @Autowired
    private CodeTransferService codeTransferService;

    @KafkaListener(id = "smsConsumer", topics = TopicConst.SMS, groupId = "sms")
    public void smsConsumer(ConsumerRecord<String, String> record) {
        try {
            JSONObject requestJson = JSONUtil.parseObj(record.value());
            String templateCode = codeTransferService.getOuterCode("SMS_TEMPLATE_CODE", requestJson.getStr("templateCode"));
            smsService.sendSms(requestJson.getStr("phoneNumber"),
                    templateCode,
                    requestJson.getStr("param"));
        } catch (Exception e) {
            log.error("【Kafka消费短信异常】:{}--{}--{}", record.topic(), record.partition(), record.key(), e);
        }
    }
}

到这里我通过SpringBoot接入阿里SMS短信服务就已经完成了,看着是不是特别简单的,其实正常的短信服务要比我这个规范的多,我这里只是演示一个简单的接入过程,有短信服务需求的小伙伴们可以尝试一波。

目录
相关文章
|
4月前
|
SQL druid Java
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
789 0
|
2月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
171 6
|
1月前
|
Java 数据安全/隐私保护 Docker
SpringBoot Docker 发布到 阿里仓库
SpringBoot Docker 发布到 阿里仓库
33 0
|
开发框架 架构师 Java
Java程序员不掌握SpringBoot怎么进大厂,阿里架构师推荐实战文档
Spring Boot作为Java编程语言的一个全新开发框架,在国内外才刚刚兴起时,还未得到普及使用。相比于以往的一些开发框架,Spring Boot不但使用更加简单,而且功能更加丰富,性能更加稳定而健壮。使用Spring Boot开发框架,不仅能提高开发速度,增强生产效率,从某种意义上,可以说是解放了程序员的劳动,而且一种新技术的使用,更能增强系统的稳定性和扩展系统的性能指标。本书就是本着提高开发效率,增强.系统性能,促进新技术的普及使用这一目的而写的。
|
消息中间件 缓存 安全
讲理论,重实战!阿里独家SpringBoot王者晋级之路小册,太强了!
大家平时学习SpringBoot的方式也一般是看大量博客或者是找一些业界评价好点的书籍,虽然SpringBoot相关资料很多,但是大多不成体系,很少有真正有能从0到1,详解Spring Boot一切从代码案例出发的案头笔记。 今天给小伙伴分享的就是来自阿里的SpringBoot王者晋级之路小册,这份小册从SpringBoot的开发环境部署开始,把Spring Boot搭建Web项目、操作数据库、使用缓存、日志、整合安全框架、结合消息队列和搜索框架,以及在实际应用中的部署全部讲得清清楚楚。
|
4月前
|
Dubbo 应用服务中间件 Docker
阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud
什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用。
|
4月前
|
开发框架 架构师 Java
Java程序员不掌握SpringBoot怎么进大厂,阿里架构师推荐实战文档
Spring Boot作为Java编程语言的一个全新开发框架,在国内外才刚刚兴起时,还未得到普及使用。
|
10月前
|
缓存 监控 架构师
价值32k!阿里顶级架构师深度解析SpringBoot进阶原理实战手册
在当下的互联网应用中,业务体系日益复杂,业务功能也在不断地变化。以典型的电商类应用为例,其背后的业务功能复杂度以及快速迭代要求的开发速度,与5年前的同类业务系统相比,面临着诸多新的挑战。这些挑战中核心的一点就是快速高效地实现系统功能,同时保证代码持续可维护,这是一个非常现实且亟待解决的问题。
|
11月前
|
缓存 监控 Java
从零到一构建完整知识体系,阿里最新SpringBoot原理最佳实践真香
Spring Boot不用多说,是咱们Java程序员必须熟练掌握的基本技能。工作上它让配置、代码编写、部署和监控都更简单,面试时互联网企业招聘对于Spring Boot这个系统开发的首选框架也是考察的比较严苛,如果你不是刚入行,只是停留在会用的阶段,那是远远不够的。 虽然Spring Boot易上手,但很多小伙伴也是时不时会跟我反映,Spring Boot技术体系太庞杂了,包含了太多的技术组件,不知道到底该如何高效学习,建立起全面且完整的Spring Boot技术体系和实践技巧,这个时候站在巨人的肩膀上学习就变得非常有必要了,汲取大佬们的学习经验,避免工作面试踩坑,轻松构建Spring Bo
|
SpringCloudAlibaba Java Spring
阿里内部最新教材:Spring+SpringBoot+SpringCloud全家桶第五版
给大家分享的就是一份来自阿里的Spring+SpringBoot+SpringCloud全家桶实战手册!本手册包含了spring源码+springboot+springcloudAlibaba全彩笔记!