本文介绍如何使用Java SDK向SMQ的指定主题中发布消息。
前提条件
消息体编码选择
当消息体无特殊字符时,建议您不使用Base64编码。
发送消息时使用
message.setMessageBodyAsRawString
方法设置消息体。接收消息时使用
message.getMessageBodyAsRawString
方法获取消息体。
示例代码
示例代码下载,请参见PublishMessageDemo。
import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudTopic;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.utils.ServiceSettings;
import com.aliyun.mns.model.Base64TopicMessage;
import com.aliyun.mns.model.RawTopicMessage;
import com.aliyun.mns.model.TopicMessage;
/**
* 1. 遵循阿里云规范,env设置ak、sk。
* 2. ${"user.home"}/.aliyun-mns.properties 文件配置如下:
* mns.endpoint=http://xxxxxxx
* mns.msgBodyBase64Switch=true/false
*/
public class PublishMessageDemo {
private static final Boolean IS_BASE64 = Boolean.valueOf(ServiceSettings.getMNSPropertyValue("msgBodyBase64Switch","false"));
public static void main(String[] args) {
String topicName = "TestTopic";
String message = "hello world!";
CloudAccount account = new CloudAccount(ServiceSettings.getMNSAccountEndpoint());
//this client need only initialize once
MNSClient client = account.getMNSClient();
publishMsg(client, topicName, message);
client.close();
}
private static void publishMsg(MNSClient client, String topicName, String message) {
CloudTopic topic = client.getTopicRef(topicName);
TopicMessage msg = IS_BASE64 ? new Base64TopicMessage() : new RawTopicMessage();
try {
msg.setMessageBody(message);
// 可选。设置该条发布消息的filterTag
//msg.setMessageTag("filterTag");
TopicMessage publishResultMsg = topic.publishMessage(msg);
System.out.println("message publish.");
System.out.println("reqId:"+publishResultMsg.getRequestId());
System.out.println("msgId:"+publishResultMsg.getMessageId());
System.out.println("md5:"+publishResultMsg.getMessageBodyMD5());
} catch (Exception e) {
e.printStackTrace();
System.out.println("publishMsg error");
}
}
}
文档内容是否对您有帮助?