短信生产者,使用rabbitmq发送消息,达到应用的解耦
,
采用直连模式
需要指定一个routingkey
引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
配置rabbitmq文件
server.port=8777
spring.rabbitmq.host=xx
spring.rabbitmq.port=xx
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
@RestController
@RequestMapping("user")
public class MessageController {
@Autowired
//注入rabbitTemplate模板方便使用api
private RabbitTemplate rabbitTemplate;
@PostMapping("sendMsg")
public String sendMsg(String phone){
//生成6位验证码
Random random = new Random();
int code = random.nextInt(999999);
if(code<100000){
code = code + 100000;
}
HashMap<Object, Object> map = new HashMap<>();
map.put("phone",phone);
map.put("code",code+"");
//直连模式,将电话号码和验证码发送出去。
rabbitTemplate.convertAndSend("queueSms", JSON.toJSONString(map));
return phone;
}
}
接收消息方
首先得在阿里云上注册短信服务
配置文件
accessKeyId=xx
accessKeySecret=xx
smsCode=xx
param={"code":"[value]"}
写一个短信工具类
@Component
public class SmsUtil {
@Value("${accessKeyId}")
private String accessKeyId;
@Value("${accessKeySecret}")
private String accessKeySecret;
public CommonResponse sendSms(String phone, String smsCode, String param) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
//request.setProtocol(ProtocolType.HTTPS);
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
request.putQueryParameter("RegionId", "cn‐hangzhou");
request.putQueryParameter("PhoneNumbers", phone);
request.putQueryParameter("SignName", "小蚂蚁");
request.putQueryParameter("TemplateCode", smsCode);
request.putQueryParameter("TemplateParam", param);
try {
CommonResponse response = client.getCommonResponse(request);
return response;
} catch (ServerException e) {
e.printStackTrace();
return null;
} catch (ClientException e) {
e.printStackTrace();
return null;
}
}
}
接收方代码
@Component
@PropertySource("classpath:application-sms.properties")
public class MessageReceive {
@Value("${smsCode}")
private String smsCode;
@Value("${param}")
private String param;
@Autowired
private SmsUtil smsUtil;
//监听queueSms队列
@RabbitListener(queuesToDeclare = @Queue("queueSms"))
public void receiveMessage(Message message) throws UnsupportedEncodingException {
String msg = new String(message.getBody(), "utf-8");
Map<String,String> map = JSON.parseObject(msg, Map.class);
String phone = map.get("phone");
String code = map.get("code");
String params = param.replace("[value]", code);
try {
CommonResponse commonResponse = smsUtil.sendSms(phone, smsCode, params);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(map.get("phone")+"----"+map.get("code"));
}
}