cdfcf00cd850335825e52d96386233b6ee2d17c9.svn-base 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package cn.com.goldenwater.dcproj.config;
  2. import cn.com.goldenwater.dcproj.service.impl.tac.TacInspYearBatchGroupPersServiceImpl;
  3. import cn.com.goldenwater.dcproj.utils.SpringUtils;
  4. import com.alicom.mns.tools.DefaultAlicomMessagePuller;
  5. import com.alicom.mns.tools.MessageListener;
  6. import com.aliyun.mns.model.Message;
  7. import com.aliyuncs.exceptions.ClientException;
  8. import com.google.gson.Gson;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  12. import org.springframework.stereotype.Component;
  13. import javax.annotation.PostConstruct;
  14. import java.text.ParseException;
  15. import java.text.SimpleDateFormat;
  16. import java.util.Date;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. @Component
  20. @ConditionalOnProperty(value = "open.SmsReportPuller")
  21. public class SmsReportPuller {
  22. private Logger logger = LoggerFactory.getLogger(getClass());
  23. private static String apiKey = "LTAIcedbS4TWjMl3";
  24. private static String apiSecrect = "Pm7ZFyf195buPjH7YdxZGSbCadEX6p";
  25. private static String messageType = "SmsUp";
  26. private static String queueName = "Alicom-Queue-1210800490235418-SmsUp";
  27. @PostConstruct
  28. public void init() {
  29. // logger.info("接收上行短信start");
  30. DefaultAlicomMessagePuller puller = new DefaultAlicomMessagePuller();
  31. //设置异步线程池大小及任务队列的大小,还有无数据线程休眠时间
  32. puller.setConsumeMinThreadSize(6);
  33. puller.setConsumeMaxThreadSize(16);
  34. puller.setThreadQueueSize(200);
  35. puller.setPullMsgThreadSize(1);
  36. //和服务端联调问题时开启,平时无需开启,消耗性能
  37. puller.openDebugLog(false);
  38. /*
  39. * TODO 将messageType和queueName替换成您需要的消息类型名称和对应的队列名称
  40. *云通信产品下所有的回执消息类型:
  41. *1:短信回执:SmsReport
  42. *2:短息上行:SmsUp
  43. *3:语音呼叫:VoiceReport
  44. *4:流量直冲:FlowReport
  45. // */
  46. // String messageType = "SmsReport";//此处应该替换成相应产品的消息类型
  47. // String queueName = "";//在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName,格式类似Alicom-Queue-xxxxxx-SmsReport
  48. try {
  49. puller.startReceiveMsg(apiKey, apiSecrect, messageType, queueName,new MyMessageListener());
  50. } catch (ClientException e) {
  51. logger.info("ClientException"+e.getErrMsg());
  52. } catch (ParseException e) {
  53. logger.info("ParseException"+e.getMessage());
  54. }catch(Exception e){
  55. logger.info("Exception"+e.getMessage());
  56. }
  57. }
  58. static class MyMessageListener implements MessageListener {
  59. private Gson gson=new Gson();
  60. private Logger logger = LoggerFactory.getLogger(getClass());
  61. private TacInspYearBatchGroupPersServiceImpl tacInspYearBatchGroupPersService= SpringUtils.getBean(TacInspYearBatchGroupPersServiceImpl.class);
  62. @Override
  63. public boolean dealMessage(Message message) {
  64. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  65. logger.info("message receiver time from mns:" + format.format(new Date()));
  66. logger.info("message handle: " + message.getReceiptHandle());
  67. logger.info("message body: " + message.getMessageBodyAsString());
  68. logger.info("message id: " + message.getMessageId());
  69. logger.info("message dequeue count:" + message.getDequeueCount());
  70. logger.info("Thread:" + Thread.currentThread().getName());
  71. try{
  72. Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
  73. //TODO 根据文档中具体的消息格式进行消息体的解析
  74. //TODO 这里开始编写您的业务代码
  75. int i = tacInspYearBatchGroupPersService.confirmerGroupPers(contentMap);
  76. logger.info("短信回复内容接收成功"+i);
  77. }catch(com.google.gson.JsonSyntaxException e){
  78. //理论上不会出现格式错误的情况,所以遇见格式错误的消息,只能先delete,否则重新推送也会一直报错
  79. return true;
  80. } catch (Throwable e) {
  81. //您自己的代码部分导致的异常,应该return false,这样消息不会被delete掉,而会根据策略进行重推
  82. return false;
  83. }
  84. //消息处理成功,返回true, SDK将调用MNS的delete方法将消息从队列中删除掉
  85. return true;
  86. }
  87. }
  88. }