[英]Symfony Messenger triggers but waits until execution is finished before sending response
这是我的问题的编辑版本,已被删除。 请不要立即投票,因为我正在寻求帮助!
我有一个控制器,它响应来自外部 API (Strava) 的 webhook 事件。 当在外部 API 中创建一个新活动时,它会向我的 webhook url 发送一个 POST。 这一切都很好。 但是,我的控制器必须在 2 秒内响应 POST。 所以我根据 symfony 文档创建了一条消息
#[Route('/strava/webhook', name:'webhook', methods: ['POST'])]
public function data(Request $request, MessageBusInterface $bus): Response
{
$bus->dispatch(new NewRideMessage($request->getContent()));
return new Response('EVENT_RECEIVED', Response::HTTP_OK, []);
}
然后消息由处理函数处理:
public function __invoke(NewRideMessage $message)
{
//Decode json string
$data = json_decode($message->getContent(),true);
$aspect_type = $data['aspect_type']; // "create" | "update" | "delete"
$object_id = $data['object_id']; // activity ID | athlete ID
$object_type = $data['object_type']; // "activity" | "athlete"
$owner_id = $data['owner_id']; // athlete ID
if ($aspect_type == 'create' && $object_type == 'activity') {
//Does ride already exist in the database
$entityManager = $this->em->getRepository(Ride::class);
if ($entityManager->findOneBy(['ride_id' => $object_id]) == null) {
//Get the user
$entityManager = $this->em->getRepository(User::class);
$user = $entityManager->findOneBy(['stravaID' => $owner_id]);
//set access token
$token = $this->strava_api->getToken($user);
//create ride object
$ride = new Ride();
$ride->setUser($user);
$ride->setSource($user->getPreferredProvider());
//get the activity from strava
$athleteActivity = $this->strava_api->getAthleteActivity($token, $object_id);
//if a valid activity is returned
if ($athleteActivity) {
$ride->setRideId($object_id);
$ride->setKm($athleteActivity['distance']);
$ride->setAverageSpeed($athleteActivity['average']);
$ride->setDate($athleteActivity['date']);
$ride->setClubRide($this->strava_api->isClubRide($token, $object_id, $athleteActivity['date']));
if ($this->strava_api->isRealRide($token, $object_id)){
$entityManager = $this->doctrine->getManager();
// $entityManager->persist($ride);
// $entityManager->flush();
}
}
//emailmessage a message
$emailmessage = (new Email())
->from(new Address($_ENV['MAILER_FROM'], 'Century Challenge Contact'))
->to($_ENV['MAILER_FROM'])
->subject('Message from Century Challenge')
->text('Message from: '.$_ENV['MAILER_FROM']."\n\r"."hello")
->addBcc('martyndwheeler@gmail.com');
/** @var Symfony\Component\Mailer\SentMessage $sentEmail */
$sentEmail = $this->mailer->send($emailmessage);
}
}
}
我希望这会触发,然后我的回复会很快得到回复; 但是,它在接收请求和发送响应之间仍然等待几秒钟。 我是根据我之前的问题的建议这样做的,并阅读了建议的链接。 我将不胜感激任何帮助。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.