Go demo
Updated at:
This topic provides a Go demo for handling message receipts from Short Message Service. You can also download the software development kit (SDK) package to pull messages from MNS.
Download link: Go SDK.
The following is an example:
Note
Before you call the API, configure the environment variables to read your access credentials.
The environment variable names for the AccessKey ID and AccessKey secret are `SECRET_AK_ENV` and `SECRET_SK_ENV`. For more information, see Configure environment variables on Linux, macOS, and Windows.
package main
import (
"os"
"encoding/base64"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/endpoints"
"github.com/aliyun/alibaba-cloud-sdk-go/services/dybaseapi"
"github.com/aliyun/alibaba-cloud-sdk-go/services/dybaseapi/mns"
"time"
)
const (
mnsDomain = "1943695596114318.mns.cn-hangzhou.aliyuncs.com"
)
func main() {
endpoints.AddEndpointMapping("cn-hangzhou", "Dybaseapi", "dybaseapi.aliyuncs.com")
// An Alibaba Cloud account AccessKey has full permissions on all APIs. Use a Resource Access Management (RAM) user for API access or daily O&M.
// Do not hardcode your AccessKey ID and AccessKey secret into your project code. Hardcoding your AccessKey information may cause it to be leaked and threaten the security of all your resources.
// This demo uses environment variables to store your AccessKey ID and AccessKey secret for API authentication.
// Create a client instance.
client, err := dybaseapi.NewClientWithAccessKey(
"cn-hangzhou", // Your zone ID
os.Getenv("SECRET_AK_ENV"), // The environment variable for your AccessKey ID
os.Getenv("SECRET_SK_ENV")) // The environment variable for your AccessKey secret
if err != nil {
// Handle exceptions.
panic(err)
}
queueName := "<QueueName>"
messageType := "<MessageType>"
var token *dybaseapi.MessageTokenDTO
var expireTime time.Time
for {
if token == nil || expireTime.Unix()-time.Now().Unix() < 2*60 {
// Create an API request and set its parameters.
request := dybaseapi.CreateQueryTokenForMnsQueueRequest()
request.MessageType = messageType
request.QueueName = queueName
// Send the request and handle exceptions.
response, err := client.QueryTokenForMnsQueue(request)
if err != nil {
panic(err)
}
token = &response.MessageTokenDTO
}
expireTime, err = time.ParseInLocation("2006-01-02 15:04:05", token.ExpireTime, time.Local)
if err != nil {
panic(err)
}
mnsClient, err := mns.NewClientWithStsToken(
"cn-hangzhou",
token.AccessKeyId,
token.AccessKeySecret,
token.SecurityToken,
)
if err != nil {
panic(err)
}
mnsRequest := mns.CreateBatchReceiveMessageRequest()
mnsRequest.Domain = mnsDomain
mnsRequest.QueueName = queueName
mnsRequest.NumOfMessages = "10"
mnsRequest.WaitSeconds = "5"
mnsResponse, err := mnsClient.BatchReceiveMessage(mnsRequest)
if err != nil {
panic(err)
}
// fmt.Println(mnsResponse)
receiptHandles := make([]string, len(mnsResponse.Message))
for i, message := range mnsResponse.Message {
messageBody, decodeErr := base64.StdEncoding.DecodeString(message.MessageBody)
if decodeErr != nil {
panic(decodeErr)
}
fmt.Println(string(messageBody))
receiptHandles[i] = message.ReceiptHandle
}
if len(receiptHandles) > 0 {
mnsDeleteRequest := mns.CreateBatchDeleteMessageRequest()
mnsDeleteRequest.Domain = mnsDomain
mnsDeleteRequest.QueueName = queueName
mnsDeleteRequest.SetReceiptHandles(receiptHandles)
//_, err = mnsClient.BatchDeleteMessage(mnsDeleteRequest) // Uncomment the following line to delete messages from the queue.
if err != nil {
panic(err)
}
}
}
}Is this page helpful?