发送消息示例

本文介绍如何使用Java SDKSMQ的指定主题中发布消息。

前提条件

消息体编码选择

当消息体无特殊字符时,建议您不使用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");
        }
    }
}