Ответ 1
На сегодняшний день AWS X-Ray теперь имеет встроенную поддержку Amazon SQS:https://aws.amazon.com/about-aws/whats-new/2019/08/aws-x-ray-now-supports-amazon-sqs/
Я пытаюсь получить пример игрушки и работать с функцией AWS Lambda, f
, вызванной сообщением в одной очереди SQS, sqs
, издает в другую очередь sqs'
, а затем рабочий, f'
читает из sqs'
и обрабатывает сообщение, в котором весь "запрос" прослеживается с помощью X-Ray.
sqs → f → sqs' → f'
В настоящее время у меня есть очереди и функции записи и получения из очереди. У меня также есть X-Ray, отслеживающий запрос от первой функции f
к очереди sqs.
Моя текущая проблема заключается в следующем: как распространять трассировку для конечного работника, чтобы я мог видеть весь процесс в рентгеновском снимке.
Вот мои текущие функции:
public class Hello implements RequestHandler<SQSEvent, Void> {
String OUTPUT_QUEUE_URL = "...";
private AmazonSQS sqs = AmazonSQSClientBuilder.standard()
.withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder()))
.build();
public Void handleRequest(SQSEvent event, Context context)
{
for(SQSMessage msg : event.getRecords()){
System.out.println(new String(msg.getBody()));
}
SendMessageRequest send_msg_request = new SendMessageRequest()
.withQueueUrl(OUTPUT_QUEUE_URL)
.withMessageBody("hello world")
.withDelaySeconds(5);
sqs.sendMessage(send_msg_request);
return null;
}
}
public class World implements RequestHandler<SQSEvent, Void>{
public Void handleRequest(SQSEvent event, Context context)
{
for(SQSMessage msg : event.getRecords()){
System.out.println(new String(msg.getBody()));
}
return null;
}
}
На сегодняшний день AWS X-Ray теперь имеет встроенную поддержку Amazon SQS:https://aws.amazon.com/about-aws/whats-new/2019/08/aws-x-ray-now-supports-amazon-sqs/