使用 AppDynamics 监控 Amazon SQS

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

AppDynamics 最近宣布 支持运行 Amazon Web Services (AWS) 扩展服务套件的应用程序。由于许多企业正在 AWS 云中迁移或部署他们的新应用程序,因此对应用程序和底层基础设施进行更深入的了解和控制以确保它们能够提供卓越的最终用户体验非常重要。

AppDynamics 为在 AWS 上运行的应用程序提供与本地运行的应用程序相同的性能监控、管理、自动化流程和分析。借助 AppDynamics Summer '15 Release ,部署在 AWS 上的应用程序现在可以轻松地进行检测,以提供对一组扩展的 AWS 服务的完全可见性和控制,包括 Amazon Simple Queue Service (Amazon SQS) Amazon Simple Storage Service (Amazon S3) 亚马逊动态数据库

在此博客中,我将重点介绍使用 Amazon SQS 监控应用程序。根据 AWS 网页 ,“Amazon SQS 是一种快速、可靠、可扩展、完全托管的消息队列服务。 SQS 使解耦云应用程序的组件变得简单且经济高效。您可以使用 SQS 以任何吞吐量级别传输任何数量的数据,而不会丢失消息或要求其他服务始终可用。”

Amazon SQS Java 消息传递库是 Amazon SQS 的 Java 消息传递服务 (JMS) 接口,使您能够在已经使用 JMS 的应用程序中使用 Amazon SQS。

SQS 中的消息队列可以手动创建,也可以通过 SQS Java Messaging Library 和 AWS Java SDK 创建,并且可以针对不同的用例以各种方式将消息发送或接收到队列。

以下是 AppDynamics 中的应用程序流程图,用于使用 Amazon SQS 的示例应用程序,用于以下三个用例:

  • 基本发送/接收

  • 批量发送/接收

  • 异步发送/接收

AppDynamics 支持开箱即用的 Amazon SQS 的所有 退出点 。对于上面概述的所有用例,每个出口点的处理方式与 JMS、.NET 消息传递等完全相同。

目前,仅支持将 Amazon SQS 的 入口点 作为持续事务的一部分。例如,如果事务起源于某个层“foo”并通过某个 SQS 队列的出口继续到下游层 bar——“bar”上的事务可能会在适当的配置下继续。用户必须指定一个 custom-interceptors.xml 配置文件,以将特殊的 SQS 入口点拦截器应用于给定的方法,并配置从何处获取相关标头。

我的同事 Anthony Kilman 分享了以下示例,以防用户的下游应用程序正在处理从 SQS 消息接收的消息:



 public abstract class  ASQSConsumer extends ASQSActor {

protected void processMessage(Message message) {

   log.info(”  Message”);

   log.info(“ MessageId: ” + message.getMessageId());

   log.info(“ ReceiptHandle: ” + message.getReceiptHandle());

   log.info(“ MD5OfBody: ” + message.getMD5OfBody());

   log.info(“ Body:       ” + message.getBody());

   for (Map.Entry<String, String> entry : message.getAttributes().entrySet()) {

       log.info(”  Attribute”);

       log.info(“ Name:  ” + entry.getKey());

       log.info(“ Value: ” + entry.getValue());

   }

   Map<String, MessageAttributeValue> messageAttributes = message.getMessageAttributes();

   log.info(“message attributes: ” + messageAttributes);

}

}


然后,继续交易的配置如下:


 public abstract class  ASQSConsumer extends ASQSActor {

protected void processMessage(Message message) {

   log.info(”  Message”);

   log.info(“ MessageId: ” + message.getMessageId());

   log.info(“ ReceiptHandle: ” + message.getReceiptHandle());

   log.info(“ MD5OfBody: ” + message.getMD5OfBody());

   log.info(“ Body:       ” + message.getBody());

   for (Map.Entry<String, String> entry : message.getAttributes().entrySet()) {

       log.info(”  Attribute”);

       log.info(“ Name:  ” + entry.getKey());

       log.info(“ Value: ” + entry.getValue());

   }

   Map<String, MessageAttributeValue> messageAttributes = message.getMessageAttributes();

   log.info(“message attributes: ” + messageAttributes);

}

}



此配置将生成如下快照:

要了解有关云应用程序性能监控和 AWS 云的更多信息,请访问 http://www.appdynamics.com/cloud/

阅读我们的免费白皮书 《管理基于云的应用程序的性能 》。