This article describes how to use the SDK for Java to create a queue, send a message, receive and delete the message, and delete the queue.
Step 1: Prepare the environment
- Download the latest version of the SDK for Java, and decompress the package to the aliyun-sdk-mns-samples folder.
- Import a Maven project into Eclipse and select the aliyun-sdk-mns-samples folder.
- In the home directory, create a file named .aliyun-mns.properties and configure the endpoint, AccessKey ID, and AccessKey secret in the file.
Note In Linux, the home directory is /home/YOURNAME/. In Windows, the home directory is C:\Users\YOURNAME.
- AccessKey ID and AccessKey secret
- The AccessKey pair that is used to call API operations in Alibaba Cloud.
- If you are using an Alibaba Cloud account, go to the AccessKey Management page of the Alibaba Cloud Management Console to create and view your AccessKey pair.
- If you are a Resource Access Management (RAM) user, log on to the RAM console to view your AccessKey pair.
- Endpoint
- The endpoint that is used to access Message Service (MNS). To view the endpoints of MNS, log on to the MNS console. For more information, see View the endpoints of a queue.
- The endpoints of MNS vary based on regions. You can use Internet endpoints and internal endpoints based on your business requirements.
- AccessKey ID and AccessKey secret
Step 2: Create a queue
You can use the following sample code to create a queue:
public class CreateQueueDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount(
ServiceSettings.getMNSAccessKeyId(),
ServiceSettings.getMNSAccessKeySecret(),
ServiceSettings.getMNSAccountEndpoint());
MNSClient client = account.getMNSClient();
try
{
QueueMeta qMeta = new QueueMeta();
qMeta.setQueueName("queue-demo");
qMeta.setPollingWaitSeconds(30);
CloudQueue cQueue = client.createQueue(qMeta);
System.out.println("Create queue successfully. URL: " + cQueue.getQueueURL());
} catch (ClientException ce)
{
System.out.println("Something wrong with the network connection between client and MNS service."
+ "Please check your network and DNS availability.");
ce.printStackTrace();
} catch (ServiceException se)
{
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");
}
se.printStackTrace();
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close();
}
}
Step 3: Send a message
After the queue is created, you can use the following sample code to send a message to the queue:
public class ProducerDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount(
ServiceSettings.getMNSAccessKeyId(),
ServiceSettings.getMNSAccessKeySecret(),
ServiceSettings.getMNSAccountEndpoint());
MNSClient client = account.getMNSClient();
try{
CloudQueue queue = client.getQueueRef("queue-demo");
for (int i = 0; i < 10; i++)
{
Message message = new Message();
message.setMessageBody("demo_message_body" + i);
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 availability.");
ce.printStackTrace();
} catch (ServiceException se)
{
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");
}
se.printStackTrace();
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close();
}
}
Step 4: Receive and delete the message
After the message is sent to the queue, you can use the following sample code to receive and delete the message:
public class ConsumerDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount(
ServiceSettings.getMNSAccessKeyId(),
ServiceSettings.getMNSAccessKeySecret(),
ServiceSettings.getMNSAccountEndpoint());
MNSClient client = account.getMNSClient();
try{
CloudQueue queue = client.getQueueRef("queue-demo");
for (int i = 0; i < 10; i++)
{
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");
}
}
} catch (ClientException ce)
{
System.out.println("Something wrong with the network connection between client and MNS service."
+ "Please check your network and DNS availability.");
ce.printStackTrace();
} catch (ServiceException se)
{
if (se.getErrorCode().equals("QueueNotExist"))
{
System.out.println("Queue is not exist. Please create queue before use");
} else if (se.getErrorCode().equals("TimeExpired"))
{
System.out.println("The request is time expired. Please check your local machine timeclock");
}
se.printStackTrace();
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close();
}
}
Step 5: Delete the queue
You can use the following sample code to delete the queue:
public class DeleteQueueDemo {
public static void main(String[] args) {
CloudAccount account = new CloudAccount(
ServiceSettings.getMNSAccessKeyId(),
ServiceSettings.getMNSAccessKeySecret(),
ServiceSettings.getMNSAccountEndpoint());
MNSClient client = account.getMNSClient();
try
{
CloudQueue queue = client.getQueueRef("queue-demo");
queue.delete();
System.out.println("Delete cloud-queue-demo successfully!");
} catch (ClientException ce)
{
System.out.println("Something wrong with the network connection between client and MNS service."
+ "Please check your network and DNS availability.");
ce.printStackTrace();
} catch (ServiceException se)
{
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");
}
se.printStackTrace();
} catch (Exception e)
{
System.out.println("Unknown exception happened!");
e.printStackTrace();
}
client.close();
}
}