MNS的消息消费模式为拉取(pull), 消费端需要向队列循环拉取消息。一般有如下两种方式,此处以Java程序为例。 利用定时器,如quartz、Timer、ScheduledExecutorService,每隔一段时间拉取一次消息。 使用while循环,示例代码如下。
while(true){ try { Message msg = queue.popMessage(); if(msg == null){ \PollingWaitSeconds expire \And you could do some work here or do nothing according to your business } else{ String messageBody = msg.getMessageBodyAsString(); String receiptHandle = msg.getReceiptHandle(); queue.deleteMessage(receiptHandle); } } catch (ServiceException ex) { ex.printStackTrace(); } catch (ClientException e){ e.printStackTrace(); } finally { if (client != null) { client.close(); } } } 捕获程序异常后,需要进行相应处理,以增加应用程序的健壮性。推荐使用PollingWaitSeconds优化性能。如果超时,SDK返回null(如上代码),RESTful API返回404。 注:PollingWaitSeconds指当队列消息量为空时,针对该队列的ReceiveMessage(RESTful API)、popMessage(SDK)等请求最长的等待时间(0-30秒,默认0秒)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。