springboot中activeMQ消息队列的引入与使用(发送短信)

1.引入pom依赖
<!--activemq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
2.application.properties配置文件中
#activemq
spring.activemq.broker-url=tcp://192.168.0.110:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=false
3.创建类
Producer 类(生产者)
@Service
@Slf4j
public class Producer {
@Autowired
private JmsMessagingTemplate JmsMessagingTemplate;//红线运行无错,貌似是idea的问题 ,可忽略

public void sendMsg(String destinationName,String message){
log.info("发送消息:"+message);
Destination Destination = new ActiveMQQueue(destinationName);
JmsMessagingTemplate.convertAndSend(Destination,message);
}
}

Consumer 类(消费者)
@Service
@Slf4j
public class Consumer {
@Autowired
private RedisService redisService;

@JmsListener(destination = "test.queue")
public void receiveMsg(String msg){
log.info("收到消息:"+msg);
}

@JmsListener(destination = "order")
public void order(String msg){
log.info("收到消息:"+msg);
}

@JmsListener(destination = "sendmsg")
public void sendmsg(String msg)throws Exception{
log.info("消息队列收到消息:"+msg);
JSONObject jo = JSONObject.parseObject(msg);
String mobile=jo.getString("mobile");
String msg1 = "{\"code\":\"" + jo.getString("code") + "\"}";
SendSmsResponse response = AliyunSms.sendSms(mobile, "SMS_146801291", msg1);
}
}
4.测试
@ResponseBody
@RequestMapping(value = "/getIdenCode1",method = RequestMethod.POST)
public ReturnVO getIdenCode1(HttpServletRequest request) {
String mobile = request.getParameter("mobile");
String code="123456";
if (StringUtils.isBlank(mobile)) {
return new ReturnVO(0,"缺少必要参数");
}
//消息队列
producer.sendMsg("sendmsg","{\"mobile\":\""+mobile+"\",\"code\":\""+code+"\"}");
return new ReturnVO(true);
}
5.附件类
<!--阿里短信-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>

<!-- fastjson阿里巴巴jSON处理器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.13</version>
</dependency>

阿里云短信工具类
public class AliyunSms {
//产品名称:云通信短信API产品,开发者无需替换
static final String product = "Dysmsapi";
//产品域名,开发者无需替换
static final String domain = "dysmsapi.aliyuncs.com";

// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
static final String accessKeyId = "accessKeyId";
static final String accessKeySecret = "accessKeySecret";

public static SendSmsResponse sendSms(String phone, String template, String msg) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(phone);
//必填:短信签名-可在短信控制台中找到
request.setSignName("短信签名");
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(template);
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
request.setTemplateParam(msg);
//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
// request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
return sendSmsResponse;
}

public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象
QuerySendDetailsRequest request = new QuerySendDetailsRequest();
//必填-号码
request.setPhoneNumber("13213000900");
//可选-流水号
request.setBizId(bizId);
//必填-发送日期 支持30天内记录查询,格式yyyyMMdd
SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
request.setSendDate(ft.format(new Date()));
//必填-页大小
request.setPageSize(10L);
//必填-当前页码从1开始计数
request.setCurrentPage(1L);
//hint 此处可能会抛出异常,注意catch
QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);
return querySendDetailsResponse;
}
}






猜你喜欢

转载自www.cnblogs.com/yr1126/p/10400051.html
今日推荐