Java Demo
本章节为您介绍Java语言获取回执消息示例方法。
下载SDK
获取回执消息,需要依赖Java语言的阿里云SDK核心库以及dybaseapi等,其中dybaseapi包用于拉取MNS消息。您需要下载的SDK,请参见Java MNS SDK。
示例方法
说明
调用接口前,需配置环境变量,通过环境变量读取访问凭证。AccessKey ID和AccessKey Secret的环境变量名:VMS_AK_ENV 、VMS_SK_ENV。配置详情请参见配置访问凭证。
import com.alicom.mns.tools.DefaultAlicomMessagePuller;
import com.alicom.mns.tools.MessageListener;
import com.aliyun.mns.model.Message;
import com.google.gson.Gson;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 只能用于接收云通信的消息,不能用于接收其他业务的消息
* 语音上行消息接收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) {
//消息的几个关键值
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());
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 com.aliyuncs.exceptions.ClientException, ParseException {
DefaultAlicomMessagePuller puller = new DefaultAlicomMessagePuller();
// 阿里云账号AccessKey ID拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户
// 此处以把AccessKey ID和AccessKey Secret保存在环境变量为例说明。 您也可以根据业务需要,保存到配置文件里
// 强烈建议不要把AccessKey ID和 AccessKey Secret保存到代码里,会存在密钥泄漏风险
String accessKeyId = System.getenv("VMS_AK_ENV");
String accessKeySecret = System.getenv("VMS_SK_ENV");
/*
* TODO 将messageType和queueName替换成您需要的消息类型名称和对应的队列名称
*/
String messageType = "messageType"; //此处应该替换成相应产品的消息类型
String queueName = "your_queueName"; //在云通信页面开通相应业务消息后,就能在页面上获得对应的queueName,每一个消息类型
TokenGetterForAlicom tokenGetterForAlicom = new TokenGetterForAlicom(
accessKeyId,
accessKeySecret
);
puller.startReceiveMsg(
tokenGetterForAlicom,
messageType,
queueName,
new MyMessageListener()
);
}
}