Springboot integriert Alibaba und kombiniert es mit mq, um Textnachrichten zu senden

1. Fügen Sie die Alibaba SDK-Abhängigkeit hinzu

pom.xmlFü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.propertiesFü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 accessKeyIdgehören accessKeySecretder AccessKey auf der Alibaba Cloud-Konsole, signNamedie SMS-Signatur templateCodeund 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.xmldie 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.propertiesFü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();
        }
    }
}

SmsMessageKlasse 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();
    }

}

SmsMessageListenerDie 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 SmsServiceder sendSmsMethode an die Nachrichtenwarteschlange gesendet. SmsMessageListenerHören Sie sich die Nachrichtenwarteschlange an, verarbeiten Sie Nachrichten und rufen Sie SmsServicedie sendSmsMethode 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.

Guess you like

Origin blog.csdn.net/qq_36151389/article/details/132856558