1. Fügen Sie die Alibaba SDK-Abhängigkeit hinzu
pom.xml
Fügen Sie der Datei die folgenden Abhängigkeiten hinzu :
<!-- 阿里大于SDK -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.3.2</version>
</dependency>
2. Konfigurieren Sie den Alibaba SMS-Dienst
application.properties
Fügen Sie der Datei die folgende Konfiguration hinzu :
# 阿里大于短信服务配置
aliyun.sms.accessKeyId=your_accessKeyId
aliyun.sms.accessKeySecret=your_accessKeySecret
aliyun.sms.signName=your_signName
aliyun.sms.templateCode=your_templateCode
Dazu accessKeyId
gehören accessKeySecret
der AccessKey auf der Alibaba Cloud-Konsole, signName
die SMS-Signatur templateCode
und die SMS-Vorlagen-ID.
3. SMS senden
In Spring Boot können wir MQ zum asynchronen Senden von Textnachrichten verwenden, um die Reaktionsgeschwindigkeit des Systems zu verbessern. Hier nehmen wir ActiveMQ als Beispiel, um zu demonstrieren, wie Alibaba und ActiveMQ zum Senden von Textnachrichten integriert werden.
Fügen Sie zunächst pom.xml
die ActiveMQ-Abhängigkeit zur Datei hinzu:
<!-- ActiveMQ -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.9</version>
</dependency>
4. application.properties
Fügen Sie der Datei die ActiveMQ-Konfiguration hinzu:
# ActiveMQ配置
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
5. Definieren Sie einen Dienst zum Versenden von Textnachrichten:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.sms.model.v20170525.SendSmsRequest;
import com.aliyuncs.sms.model.v20170525.SendSmsResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map;
@Service
public class SmsService {
@Value("${aliyun.sms.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.sms.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.sms.signName}")
private String signName;
@Value("${aliyun.sms.templateCode}")
private String templateCode;
@Resource
private JmsMessagingTemplate jmsMessagingTemplate;
/**
* 发送短信
*
* @param mobile 手机号
* @param paramMap 短信参数
*/
public void sendSms(String mobile, Map<String, String> paramMap) {
jmsMessagingTemplate.convertAndSend("sms.queue", new SmsMessage(mobile, paramMap));
}
/**
* 发送短信
*
* @param message 短信消息
*/
public void sendSms(SmsMessage message) {
DefaultProfile profile = DefaultProfile.getProfile("default", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setPhoneNumbers(message.getMobile());
request.setSignName(signName);
request.setTemplateCode(templateCode);
request.setTemplateParam(message.getParamJson());
try {
SendSmsResponse response = client.getAcsResponse(request);
if (response.getCode() != null && response.getCode().equals("OK")) {
System.out.println("短信发送成功:" + message);
} else {
System.out.println("短信发送失败:" + message + ", " + response.getMessage());
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
}
SmsMessage
Klasse zum Kapseln von SMS-Nachrichten:
public class SmsMessage implements Serializable {
private static final long serialVersionUID = 1L;
private String mobile;
private Map<String, String> paramMap;
public SmsMessage() {
}
public SmsMessage(String mobile, Map<String, String> paramMap) {
this.mobile = mobile;
this.paramMap = paramMap;
}
// getter/setter
}
6. Konfigurieren Sie die Nachrichtenwarteschlange und den Listener in der Startup-Klasse:
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import javax.jms.Queue;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Queue smsQueue() {
return new ActiveMQQueue("sms.queue");
}
@Bean
public SmsMessageListener smsMessageListener() {
return new SmsMessageListener();
}
}
SmsMessageListener
Die Klasse wird verwendet, um die Nachrichtenwarteschlange abzuhören und Textnachrichten zu senden:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class SmsMessageListener {
@Autowired
private SmsService smsService;
@JmsListener(destination = "sms.queue")
public void receiveMessage(SmsMessage message) {
smsService.sendSms(message);
}
}
Auf diese Weise wird die SMS-Nachricht beim Aufrufen SmsService
der sendSms
Methode an die Nachrichtenwarteschlange gesendet. SmsMessageListener
Hören Sie sich die Nachrichtenwarteschlange an, verarbeiten Sie Nachrichten und rufen Sie SmsService
die sendSms
Methode zum Senden von Textnachrichten auf. Da das Senden von Textnachrichten ein E/A-intensiver Vorgang ist, kann die asynchrone Verarbeitung die Reaktionsgeschwindigkeit des Systems verbessern.