AWS sns推送消息 sqs获取消息实现Demo

来源:互联网 发布:熟悉掌握办公软件 编辑:程序博客网 时间:2024/05/15 13:46

直接上代码

import java.util.List;import java.util.Map.Entry;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.amazonaws.services.sns.AmazonSNS;import com.amazonaws.services.sns.AmazonSNSClientBuilder;import com.amazonaws.services.sns.model.CreateTopicRequest;import com.amazonaws.services.sns.model.CreateTopicResult;import com.amazonaws.services.sns.model.PublishRequest;import com.amazonaws.services.sns.model.PublishResult;import com.amazonaws.services.sqs.AmazonSQS;import com.amazonaws.services.sqs.AmazonSQSClientBuilder;import com.amazonaws.services.sqs.model.DeleteMessageRequest;import com.amazonaws.services.sqs.model.Message;import com.amazonaws.services.sqs.model.ReceiveMessageRequest;/*** @ClassName: SNSUtil* @Description: Amazon SNS 发布、订阅消息收发工具类* @author zengyushuang* @date 2017年7月27日 下午4:13:40**/public class SNSUtil{/*** @Title: createTopic* @Description: 创建话题* @autor zengyushuang * @return CreateTopicResult */ public CreateTopicResult createTopic(){AmazonSNS sns = AmazonSNSClientBuilder.defaultClient();CreateTopicRequest createTopicRequest = new CreateTopicRequest("myNewTopic");CreateTopicResult createTopicResult = sns.createTopic(createTopicRequest);return createTopicResult;}/*** @Title: sendMessage* @Description: 向话题发送消息* @autor zengyushuang* @param msg json/jsonArray/普通字符串皆可* @param topicArn 发送消息的topic地址* @return String AWS返回的messageId*/ public String sendMessage(String msg, String topicArn){AmazonSNS sns = AmazonSNSClientBuilder.defaultClient();PublishRequest publishRequest = new PublishRequest(topicArn, msg);PublishResult publishResult = sns.publish(publishRequest);return publishResult.getMessageId();}/*** @Title: getMessage* @Description: 获取订阅的消息* @autor zengyushuang* @param queueUrl 获取消息的队列地址* @param maxNumberOfMessages 获取的最大消息数量,values:1-10* @return List<Message>  队列中的消息 *  Message所含属性:MessageId, ReceiveHandle(删除消息时所需), MD5OfBody, Body(消费者所需数据)*/ public List<Message> getMessage(String queueUrl, Integer maxNumberOfMessages){AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl);receiveMessageRequest.setMaxNumberOfMessages(maxNumberOfMessages);List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();return messages;}/*** @Title: deleteMessage* @Description: 删除消息* @autor zengyushuang* @param queueUrl* @param receiptHandle* @return* @return boolean   */ public boolean deleteMessage(String queueUrl, String receiptHandle){AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient();sqs.deleteMessage(new DeleteMessageRequest(queueUrl, receiptHandle));return true;}public static void main(String[] args) {JSONObject jsonObject = new JSONObject();jsonObject.put("name", "zys");jsonObject.put("area", "CQS");JSONArray jsonArray = new JSONArray();jsonArray.add(jsonObject);JSONObject jsonObject1 = new JSONObject();jsonObject1.put("name", "ll");jsonObject1.put("area", "SCC");jsonArray.add(jsonObject1);String msg = jsonArray.toJSONString();String topicArn = "";SNSUtil snsUtil = new SNSUtil();String queueUrl = "";List<Message> messages = snsUtil.getMessage(queueUrl,10);for(Message message : messages){System.out.println(" Message");System.out.println("  MessageId:    " + message.getMessageId());System.out.println("  ReceiveHandle:" + message.getReceiptHandle());System.out.println("  MD5OfBody:    " + message.getMD5OfBody());System.out.println("  Body:         " + message.getBody());for(Entry<String,String> entry : message.getAttributes().entrySet()){System.out.println("  Attribute");System.out.println("  Name:    " + entry.getKey());System.out.println("  Value:   " + entry.getValue());}snsUtil.deleteMessage(queueUrl, message.getReceiptHandle());}snsUtil.sendMessage(msg, topicArn);}}

在初始化AmazonSQS和AmazonSNS时,直接用默认方式,即defaultClient()获取即可,这种方式会去查询profile、环境变量、classPath配置文件等,总之,几种配置方式都会查,直到找到你的授权认证用户名和密码

如果队列中的消息数量较少(少于1,000个),则您最有可能获得的消息少于每次ReceiveMessage呼叫请求的消息数 。如果队列中的消息数量非常小,您可能不会在特定ReceiveMessage响应中收到任何消息。如果发生这种情况,请重复该请求。