阿里云物聯網卡發送下行短信與上行短信訊息接收
前言:阿里云短信服務分為兩種:1.普通通訊sim卡,2.物聯網卡,
本文演示介面demo均為阿里云物聯網卡(java),
1.發送下行短信,阿里云有公開的下行短信API(DoSendIotSms)
直接搜索介面名稱(DoSendIotSms),所需引數與回傳示例都有寫明,
2.接收上行短信訊息
下載官方訊息demo:專案名:alicom-mns-receive-samples
將專案lib中的jar包引入到專案,與src平級
jar包在引入時可能會與原專案有沖突,洗掉低版本jar包即可

隨后加入接收訊息demo
package com.alicom.mns.sample;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.alicom.mns.tools.DefaultAlicomMessagePuller;
import com.alicom.mns.tools.MessageListener;
import com.aliyun.mns.model.Message;
import com.google.gson.Gson;
/**
* 只能用于接收云通信的訊息,不能用于接收其他業務的訊息
* 短信上行訊息接收demo
*/
public class ReceiveDemo {
private static Log logger=LogFactory.getLog(ReceiveDemo.class);
static class MyMessageListener implements MessageListener{
private Gson gson=new Gson();
@Override
public boolean dealMessage(Message message) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//訊息的幾個關鍵值
System.out.println("message receiver time from mns:" + format.format(new Date()));
System.out.println("message handle: " + message.getReceiptHandle());
System.out.println("message body: " + message.getMessageBodyAsString());
System.out.println("message id: " + message.getMessageId());
System.out.println("message dequeue count:" + message.getDequeueCount());
System.out.println("Thread:" + Thread.currentThread().getName());
try{
Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
//TODO 根據檔案中具體的訊息格式進行訊息體的決議
String arg = (String) contentMap.get("arg");
//TODO 這里開始撰寫您的業務代碼
}catch(com.google.gson.JsonSyntaxException e){
logger.error("error_json_format:"+message.getMessageBodyAsString(),e);
//理論上不會出現格式錯誤的情況,所以遇見格式錯誤的訊息,只能先delete,否則重新推送也會一直報錯
return true;
} catch (Throwable e) {
//您自己的代碼部分導致的例外,應該return false,這樣訊息不會被delete掉,而會根據策略進行重推
return false;
}
//訊息處理成功,回傳true, SDK將呼叫MNS的delete方法將訊息從佇列中洗掉掉
return true;
}
}
public static void main(String[] args) throws Exception, ParseException {
DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();
//設定異步執行緒池大小及任務佇列的大小,還有無資料執行緒休眠時間
puller.setConsumeMinThreadSize(6);
puller.setConsumeMaxThreadSize(16);
puller.setThreadQueueSize(200);
puller.setPullMsgThreadSize(1);
//和服務端聯調問題時開啟,平時無需開啟,消耗性能
puller.openDebugLog(false);
//TODO 此處需要替換成開發者自己的AK資訊
String accessKeyId="accessKeyId";
String accessKeySecret="accessKeySecret";
/*
* TODO 將messageType和queueName替換成您需要的訊息型別名稱和對應的佇列名稱
*云通信產品下所有的回執訊息型別:
*1:短信回執:SmsReport,
*2:短息上行:SmsUp
*3:語音呼叫:VoiceReport
*4:流量直沖:FlowReport
*/
String messageType="messageType";//此處應該替換成相應產品的訊息型別
String queueName="queueName";//在云通信頁面開通相應業務訊息后,就能在頁面上獲得對應的queueName,格式類似Alicom-Queue-xxxxxx-SmsReport
puller.startReceiveMsg(accessKeyId,accessKeySecret, messageType, queueName, new MyMessageListener());
}
}
修改四個屬性值:
(1.)accessKeyId
(2.)accessKeySecret(AK值)
(3.)messageType:
1.短信回執-SmsReport
2.短信上行:SmsUp
3.音呼叫:VoiceReport
4.流量直沖:FlowReport
(4.)queueName:在云通信頁面開通相應業務訊息后,就能在頁面上獲得對應的queueName,格式類似Alicom-Queue-xxxxxx-SmsReport
運行這個類:測驗:
1.先發送短信
2.回復短信
3.可以看見控制臺列印相關資訊
4.類運行之后,會一直接收上行短信,無需重復運行

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/19871.html
標籤:其他
