springboot integra Alibaba y lo combina con mq para enviar mensajes de texto

1. Agregue la dependencia del SDK de Alibaba

pom.xmlAgregue las siguientes dependencias al archivo :

<!-- 阿里大于SDK -->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>1.3.2</version>
</dependency>

2. Configurar el servicio de SMS de Alibaba

application.propertiesAgregue la siguiente configuración al archivo :

# 阿里大于短信服务配置
aliyun.sms.accessKeyId=your_accessKeyId
aliyun.sms.accessKeySecret=your_accessKeySecret
aliyun.sms.signName=your_signName
aliyun.sms.templateCode=your_templateCode

Entre ellos, accessKeyIdse accessKeySecretencuentran la AccessKey en la consola de Alibaba Cloud, signNamela firma de SMS templateCodey el ID de la plantilla de SMS.

3. Enviar SMS

En Spring Boot, podemos usar MQ para enviar mensajes de texto de forma asincrónica para mejorar la velocidad de respuesta del sistema. Aquí tomamos ActiveMQ como ejemplo para demostrar cómo integrar Alibaba y ActiveMQ para enviar mensajes de texto.

Primero, pom.xmlagregue la dependencia ActiveMQ al archivo:

<!-- ActiveMQ -->
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.15.9</version>
</dependency>

4. application.propertiesAgregue la configuración de ActiveMQ al archivo:

# ActiveMQ配置
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin

5. Defina un Servicio para enviar mensajes de texto:

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

SmsMessageClase utilizada para encapsular mensajes SMS:

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. Configure la cola de mensajes y el oyente en la clase de inicio:

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

}

SmsMessageListenerLa clase se utiliza para escuchar la cola de mensajes y enviar mensajes de texto:

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

}

De esta forma, cuando llamemos SmsServiceal sendSmsmétodo, el mensaje SMS se enviará a la cola de mensajes. SmsMessageListenerEscuche la cola de mensajes y procese mensajes, y llame SmsServiceal sendSmsmétodo para enviar mensajes de texto. Debido a que enviar mensajes de texto es una operación que requiere un uso intensivo de IO, procesarlo de forma asincrónica puede mejorar la velocidad de respuesta del sistema.

Supongo que te gusta

Origin blog.csdn.net/qq_36151389/article/details/132856558
Recomendado
Clasificación