このドキュメントでは、CreateQueue、SendMessage、ReceiveMessage、DeleteMesssage、DeleteQueue など、MNS の Java SDK のサンプルコードを使用する方法を紹介します。
1. 事前準備
- Java SDK の最新バージョンをダウンロードし、aliyun-sdk-mns-samples フォルダに解凍します。
- フォルダ alien-idk-mns-samples の下にある maven プロジェクトをインポートします。
- ユーザフォルダー(/home/YOURNAME/)の下に、endpoint、AccessKeyID、AccessKeySecret で構成ファイルを作成します。
ファイルサンプルを設定します。
mns.accountendpoint=http://$accountid.mns.$region.aliyuncs.com
mns.accesskeyid=$your_accesskeyid
mns.accesskeysecret=$your_accesskeysecret
注意:
- AK は $your_accesskeyid と $your_accesskeysecret の略称で、上の設定ファイルで Alibaba Cloud Service にアクセスするために使用されます。 AK はメインアカウントまたは RAM アカウントから使用できます。
- mns.accountendpoint は、Alibaba Cloud Message Service のアクセスポイントです。Message Service コンソールの右上にある [エンドポイントの取得] ボタンをクリックすると取得できます。
2. キューの作成
サンプルコードでキューの作成方法を示します。
public class CreateQueueDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
String queueName = "TestQueue";
QueueMeta meta = new QueueMeta(); //デフォルト値で QueueMeta 属性を設定
meta.setQueueName(queueName); // キュー名を設定
meta.setPollingWaitSeconds(15);
meta.setMaxMessageSize(2048L);
try {
CloudQueue queue = client.createQueue(meta);
} catch (ClientException ce)
{
System.out.println("Something wrong with the network connection between client and MNS service."
+ "Please check your network and DNS availablity.");
ce.printStackTrace();
} catch (ServiceException ex)
{
se.printStackTrace();
logger.error("MNS exception requestId:" + se.getRequestId(), se);
if (se.getErrorCode() != null) {
if (se.getErrorCode().equals("QueueNotExist"))
{
System.out.println("Queue is not exist.Please create before use");
} else if (se.getErrorCode().equals("TimeExpired"))
{
System.out.println("The request is time expired. Please check your local machine timeclock");
}
}
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close(); //最後にクライアントを閉じる
}
}
キューの属性の詳細について、キュー関連の操作 を参照してください。
MNS サービスのエラーコードの詳細について、エラーコード を参照してください。
3. メッセージの送信
下記のコードで、キューにメッセージを送信します。
public class ProducerDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
try {
CloudQueue queue = client.getQueueRef("TestQueue");
Message message = new Message();
message.setMessageBody("I am test message ");
Message putMsg = queue.putMessage(message);
System.out.println("Send message id is: " + putMsg.getMessageId());
} catch (ClientException ce)
{
System.out.println("Something wrong with the network connection between client and MNS service."
+ "Please check your network and DNS availablity.");
ce.printStackTrace();
} catch (ServiceException ex)
{
se.printStackTrace();
logger.error("MNS exception requestId:" + se.getRequestId(), se);
if (se.getErrorCode() != null) {
if (se.getErrorCode().equals("QueueNotExist"))
{
System.out.println("Queue is not exist.Please create before use");
} else if (se.getErrorCode().equals("TimeExpired"))
{
System.out.println("The request is time expired. Please check your local machine timeclock");
}
}
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close();
}
}
MNS サービスのエラーコードの詳細について、エラーコード を参照してください。
4. メッセージの受信と削除
手順 3 で送信したメッセージを受信し、削除します。
public class ConsumerDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
try{
CloudQueue queue = client.getQueueRef("TestQueue");
Message popMsg = queue.popMessage();
if (popMsg != null){
System.out.println("message handle: " + popMsg.getReceiptHandle());
System.out.println("message body: " + popMsg.getMessageBodyAsString());
System.out.println("message id: " + popMsg.getMessageId());
System.out.println("message dequeue count:" + popMsg.getDequeueCount());
//受信したメッセージを削除
queue.deleteMessage(popMsg.getReceiptHandle());
System.out.println("delete message successfully.\n");
}
else{
System.out.println("message not exist in TestQueue.\n");
}
} catch (ClientException ce)
{
System.out.println("Something wrong with the network connection between client and MNS service."
+ "Please check your network and DNS availablity.");
ce.printStackTrace();
} catch (ServiceException se)
{
se.printStackTrace();
logger.error("MNS exception requestId:" + se.getRequestId(), se);
if (se.getErrorCode() != null) {
if (se.getErrorCode().equals("QueueNotExist"))
{
System.out.println("Queue is not exist.Please create before use");
} else if (se.getErrorCode().equals("TimeExpired"))
{
System.out.println("The request is time expired. Please check your local machine timeclock");
}
}
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close();
}
}
MNS サービスのエラーコードの詳細について、エラーコード を参照してください。
5. キューの削除
public class DeleteQueueDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount("YourAccessId", "YourAccessKey", "MNSEndpoint");
MNSClient client = account.getMNSClient();
try{
CloudQueue queue = client.getQueueRef("TestQueue");
queue.delete();
} catch (ClientException ce)
{
System.out.println("Something wrong with the network connection between client and MNS service."
+ "Please check your network and DNS availablity.");
ce.printStackTrace();
} catch (ServiceException se)
{
se.printStackTrace();
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close();
}
}