Tạo X-Ray inspector
Tạo X-Ray inspector
- Trước tiên để đo lường các phương thức ta cần thêm Annotation @XRayEnabled ở file ProductRepository và ProductsController


- Trong thư mục config tạo một file mới có tên là XRayInspector

- Thêm 2 annotation vào class XRayInspector với
- @Aspect: Đây là một annotation của Spring AOP. Nó chỉ ra rằng lớp này sẽ chứa logic cross-cutting, nghĩa là các hành vi (behavior) mà có thể ảnh hưởng hoặc được áp dụng trên nhiều lớp hoặc phương thức khác nhau. Trong trường hợp này, đó là việc thêm các thông tin giám sát từ AWS X-Ray
- @Component: Annotation này của Spring Framework đánh dấu lớp như một “component”, cho phép Spring tự động phát hiện và quản lý nó như một bean trong ApplicationContext.

- cho Class XRayInspector kế thừa từ BaseAbstractXRayInterceptor, một lớp trừu tượng được sử dụng để tạo ra các interceptor cho AWS X-Ray, nơi các phương thức có thể được ghi đè để tùy chỉnh hành vi của các subsegment trong AWS X-Ray.
@Aspect
@Component
public class XRayInspector extends BaseAbstractXRayInterceptor {
@Override
protected void xrayEnabledClasses() {
}
}

- Tạo phương thức Method generateMetadata(). Phương thức này được ghi đè từ lớp cha (BaseAbstractXRayInterceptor). Nó nhằm mục đích tạo ra metadata cho một subsegment của AWS X-Ray dựa trên điểm nối (join point) đang được tiến hành. ProceedingJoinPoint là một khái niệm trong AOP đại diện cho một điểm thực thi mà tại đó có thể xảy ra một quá trình chèn (interception) và Subsegment là một phần của trace trong AWS X-Ray, cho phép thu thập thêm thông tin. Trong trường hợp này, phương thức chỉ đơn giản gọi phương thức của lớp cha bằng super.generateMetadata().
@Override
protected Map<String, Map<String, Object>> generateMetadata(
ProceedingJoinPoint proceedingJoinPoint, Subsegment subsegment
) {
return super.generateMetadata(proceedingJoinPoint, subsegment);
}

- Phương thức xrayEnabledClasses() là một phương thức được đánh dấu với annotation @Pointcut. Annotation này chỉ định một biểu thức pointcut trong Spring AOP, mô tả tại đâu một advice (lời khuyên) nên được áp dụng. Trong trường hợp này, biểu thức pointcut @within(com.amazonaws.xray.spring.aop.XRayEnabled) chỉ ra rằng advice sẽ được áp dụng cho bất kỳ lớp nào được đánh dấu với annotation @XRayEnabled do com.amazonaws.xray.spring.aop cung cấp. Phương thức không có nội dung bên trong, vì nó chỉ dùng để xác định vị trí áp dụng advice
@Override
@Pointcut("@within(com.amazonaws.xray.spring.aop.XRayEnabled)")
protected void xrayEnabledClasses() {}

Thêm X-Ray interceptor vào DynamoDB Client
- Mở file DynamoDBConfig ta thêm interceptor vào dynamoDbAsyncClient như sau
.overrideConfiguration(ClientOverrideConfiguration.builder()
.addExecutionInterceptor(new TracingInterceptor())
.build())

- Cuối cùng thêm @EnableAspectJAutoProxy vào ProductsserviceApplication
