当前位置: 首页 > 知识库问答 >
问题:

带aws x射线的Spring座模板

廉博赡
2023-03-14

我想使用aws x-ray跟踪部署为aws lambdas的spring micro服务之间的调用。

设置如下:

>

微服务B,apiendpoint部署为aws lambda,通过https调用微服务A

两种微服务都包括aws对X射线的依赖关系:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-xray-recorder-sdk-bom</artifactId>
            <version>1.2.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-core</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-apache-http</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-aws-sdk</artifactId>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-aws-sdk-instrumentor</artifactId>
    </dependency>
</dependencies>

对于这两种微服务,已通过无服务器应用程序模型sam.yaml文件启用跟踪:

Resources:
  FunctionA:
    Type: AWS::Serverless::Function
    Properties:
      Handler: example.HandlerA::handleRequest
      Runtime: java8
      CodeUri: target/foo.jar
      MemorySize: 512
      Tracing: Active
      Policies:
        - AWSLambdaBasicExecutionRole
        - AWSXrayWriteOnlyAccess 
      Timeout: 20
      Events:
        GetResource:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: any

虽然我可以在x射线web界面中看到对服务A和B的单独调用的跟踪,但对A的B调用不会显示为复合跟踪。

有什么想法吗?可能我需要实例化一个servlet过滤器。仅仅包含依赖项是不够的,对吗?

共有1个答案

方坚壁
2023-03-14

此时,Amazon API网关未传播x-amzn-trace-id头。

听起来您的AWS Lambda函数可能部署在API网关endpoint之后。由于API Gateway与AWS X-Ray集成中的这一限制,目前无法将此操作作为一个连续跟踪进行跟踪。

在单个连续跟踪中跟踪此操作的一种方法是让microservice B使用AWS Lambda调用API直接调用microservice a。此API确实尊重x-amzn-trace-id标头(该标头将自动添加到调用请求中,因为您的项目中包含了aws x射线记录器sdk aws sdk instrumentor工件)。

 类似资料:
  • 后端的这两个模型在前端有它们的对应。我添加_links部分是因为Spring Rest api提供链接而不是外键: 我根据从API获得的信息创建了这些模型。例如,localhost:8080/api/b/1上的get请求给出: 我可以使用下面所示的angular 2服务方法轻松地在表A中插入新行(因为它不包含外键): 在Spring中,当我试图将新行插入到表B中时,会出现以下错误: 我想知道htt

  • 在这种情况下,优化sockets java中的perfomance,使用sockets是BufferedWriter还是PrintWriter更好?

  • 我正在努力正确配置nginx,以确保它可以处理Express(端口8081)和Socket的代理。io(端口3000)。下面是我的配置,它当前为整个请求(不仅仅是Socket.io)产生了502错误: 据我所知,我需要确保Socket使用的Websocket。io已升级到HTTP,但这正是我努力掌握自己需要做什么的地方。可能是两个插座。io和Express需要在不同的端口上运行,然后需要根据我上面

  • 我跟着Spring走。io是一个关键的教程,可以让REST API与MySQL DB一起启动,一切都进展顺利。然而,我发现了一个我无法配置或解决的行为。 当我使用内置功能从PagingAndSortingRepository中检索资源时,生成的剩余资源会自动分页,并用有用的HAL链接(链接、self、搜索、链接资源等)进行封装。我想用这个。 当我实现我的控制器来定制PostMapping行为并引入

  • 我有不同实现的< code>ProductHandler类,例如< code>ABCProductHandler、< code>DEFProductHandler等..它们是使用如下所示的命令模式从< code>ProductServiceImpl类调用的。 产品ServiceImpl类: 但是,我对上面的 类不满意,因为有很多带有样板代码的产品 调用。 现在,我的问题是,有什么方法可以轻松加载?

  • 问题内容: 我试图了解如何在使用Spring进行事务管理的Java应用程序中实现线程。我已经在Spring文档中找到TaskExecutor部分,并且ThreadPoolTask​​Executor看起来很适合我的需求。 ThreadPoolTask​​Executor 该实现只能在Java 5环境中使用,也是该环境中最常用的一种。它公开了用于配置java.util.concurrent.Thre