zoukankan      html  css  js  c++  java
  • 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("12300000000");
    //可选-流水号
    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;
    }
    }






  • 相关阅读:
    postman(十一):添加cookie
    基于百度通用翻译API的一个翻译小工具
    python之做一个简易的翻译器(二)
    python之做一个简易的翻译器(一)
    如何查看linux服务器内存使用情况
    linux下查看进程id时用到的命令
    python日志模块的使用
    (二十九)c#Winform自定义控件-文本框(二)-HZHControls
    (二十八)c#Winform自定义控件-文本框(一)-HZHControls
    (二十七)c#Winform自定义控件-多输入窗体-HZHControls
  • 原文地址:https://www.cnblogs.com/yr1126/p/10400051.html
Copyright © 2011-2022 走看看