brefphp / symfony-messenger Goto Github PK
View Code? Open in Web Editor NEWBridge to use Symfony Messenger on AWS Lambda with Bref
License: MIT License
Bridge to use Symfony Messenger on AWS Lambda with Bref
License: MIT License
The package is stable now, for 1.0 let's cleanup the docs and focus the package on 1 main way:
Could we cleanup options and enable a few things by default too? (like partial batch failures)
Also might be worth exploring possibilities of respecting Symfony Messenger features (like retries) instead of relying on SQS retry config?
In the document says consumer.php
has this require
require dirname(__DIR__) . '/config/bootstrap.php';
But I can't find bootstrap.php
file in config folder.
Hi,
Thanks for this package and the brefphp bundle in general, it's magical !
I do have an issue to make the consumer work on my lambda though.
My setup works fine when using the doctrine queue, but when I switch in order to use the SQS queue, the message is sent to the SQS and then the lambda seems to 'consume' the message, based on the logs, but my process (sending a message) is not happening.
I tried debugging my MessageHandler using var_dump and the Psr\Logger but nothing is being logged.
All I know is that the lambda run for about ~6s each time but nothing more :/
I checked the lambda timeout (15min), vpc, env varibales and the sqs config but I can't seem to find why it's not working.
An interesting fact is that one of my other message type is working when using the same sqs + lambda.
Any idea what I could be missing ?
Thanks in advance for your help,
Julien Pessey
P.S : I did not know what config file to include (I basically followed the doc) so please feel free to ask me for any !
Looking through EventBridgeTransport.php
it appears it does not allow you to send events to a custom event bus.
[
'Detail' => json_encode($encodedMessage, JSON_THROW_ON_ERROR),
// Ideally here we could put the class name of the message, but how to retrieve it?
'DetailType' => 'Symfony Messenger message',
'Source' => $this->source,
]
Is this the case...or am I missing something.
We have implemented a system where an SNS Topic distributes messages to multiple SQS Queues, each backed by a dedicated Lambda function. The primary reason for this setup is to assign a unique $transportName to each Lambda through environment variables, which is necessary for the Symfony Messenger-based SqsConsumer
class from your library.
Current Architecture
SNS Topic: Distributes messages to multiple SQS Queues and their corresponding Dead Letter Queues (DLQs).
SQS Queues: Each queue has a dedicated Lambda function.
Lambda Functions: Created for each SQS Queue to process messages individually, with a unique $transportName set via environment variables.
resource "aws_lambda_function" "user_account_send_mail" { // Lambda function configuration... environment { variables = { // Environment variables... AWS_SUBSCRIBER_TRANSPORT_NAME = "async_${each.key}" } } // Additional configuration... }
Currently, each message handler is linked to a specific transport, as indicated by annotations like
#[AsMessageHandler(fromTransport: 'async_subscriber_send_mail_user_changed')]
or
#[AsMessageHandler(fromTransport: 'async_subscriber_backup_user_changed')]
(Both message handlers consumes the same event)
This setup leads to limitations, such as the inability to process the same event by multiple handlers without duplicating messages across different SQS Queues.
Is there a way to eliminate the need for separate transports ($transportName) https://github.com/brefphp/symfony-messenger/blob/master/src/Service/Sqs/SqsConsumer.php#L38 and deduce this information dynamically, perhaps from the messenger.yaml configuration or the SQS event payload?
I'm asking because I want to get rid of many lambdas for each sqs queue and just use one lambda. Maybe you know a different way (if it's not possible to get rid of the $transportName
) How I can configure my lambda dynamically? :)
messenger.yaml
framework:
messenger:
transports:
async_event_user_changed: '%env(MESSENGER_EVENT_USER_CHANGED_TRANSPORT_DSN)%'
async_subscriber_send_mail_user_removed: '%env(MESSENGER_SUBSCRIBER_SEND_MAIL_USER_REMOVED_TRANSPORT_DSN)%'
async_subscriber_backup_user_changed: '%env(MESSENGER_SUBSCRIBER_BACKUP_USER_CHANGED_TRANSPORT_DSN)%'
routing:
'App\Event\UserChangedEvent': async_event_user_changed
Maybe some of you already know this "issue".
I'm wondering why I got no error message of the messenger worker.
But in the log of CloudWatch I can see all of this.
My monolog.yaml
looks like:
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: grouped
excluded_http_codes: [404, 405, 409]
buffer_size: 50
grouped:
type: group
members: [nested, deduplicated]
deduplicated:
type: deduplication
handler: swift
swift:
type: swift_mailer
from_email: '[email protected]'
to_email: ['[email protected]']
subject: 'Error! %%message%%'
level: debug
formatter: monolog.formatter.html
content_type: text/html
nested:
type: stream
path: "php://stderr"
level: debug
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
And the exception is:
{
"errorType": "Symfony\\Component\\Messenger\\Exception\\HandlerFailedException",
"errorMessage": "Handling \"App\\Message\\PaymentCapturedMessage\" failed: Call to undefined method",
"stack": [
"#0 /var/task/vendor/symfony/messenger/Middleware/SendMessageMiddleware.php(74): Symfony\\Component\\Messenger\\Middleware\\HandleMessageMiddleware->handle()",
"#1 /var/task/vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php(34): Symfony\\Component\\Messenger\\Middleware\\SendMessageMiddleware->handle()",
"#2 /var/task/vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php(68): Symfony\\Component\\Messenger\\Middleware\\FailedMessageProcessingMiddleware->handle()",
"#3 /var/task/vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php(48): Symfony\\Component\\Messenger\\Middleware\\DispatchAfterCurrentBusMiddleware->handle()",
"#4 /var/task/vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php(37): Symfony\\Component\\Messenger\\Middleware\\RejectRedeliveredMessageMiddleware->handle()",
"#5 /var/task/vendor/symfony/messenger/MessageBus.php(77): Symfony\\Component\\Messenger\\Middleware\\AddBusNameStampMiddleware->handle()",
"#6 /var/task/vendor/bref/symfony-messenger/src/Service/SimpleBusDriver.php(24): Symfony\\Component\\Messenger\\MessageBus->dispatch()",
"#7 /var/task/vendor/bref/symfony-messenger/src/Service/Sqs/SqsConsumer.php(58): Bref\\Symfony\\Messenger\\Service\\SimpleBusDriver->putEnvelopeOnBus()",
"#8 /var/task/vendor/bref/bref/src/Event/Sqs/SqsHandler.php(24): Bref\\Symfony\\Messenger\\Service\\Sqs\\SqsConsumer->handleSqs()",
"#9 /var/task/vendor/bref/bref/src/Runtime/Invoker.php(29): Bref\\Event\\Sqs\\SqsHandler->handle()",
"#10 /var/task/vendor/bref/bref/src/Runtime/LambdaRuntime.php(91): Bref\\Runtime\\Invoker->invoke()",
"#11 /opt/bref/bootstrap.php(43): Bref\\Runtime\\LambdaRuntime->processNextEvent()",
"#12 {main}"
]
}
Hi,
First of all I don't know if I should post this here or in https://github.com/brefphp/bref/.
I've been getting the error HTTP 403 returned for "https://sqs.eu-west-3.amazonaws.com/". Code: AccessDenied Message: Access to the resource https://sqs.eu-west-3.amazonaws.com/ is denied. Type: Sender Detail:
whenever I try to call one of my SQS queues.
I've been using bref/symfony-messenger
0.2.0 and bref/bref
0.5.29 without any issue but I now get the 403 error since I upgraded to bref/symfony-messenger
0.4.0 and bref/bref
1.1.4
I didn't change anything in AWS or in the credentials, and reverting to the previous version fixes the issue.
I only made the required changes so that the configuration works with the new version, like changing the runtime from provided
to provided.al2
This is the content of my messenger.yaml:
framework:
messenger:
transports:
export:
dsn: '%env(MESSENGER_TRANSPORT_DSN_EXPORT)%'
options:
auto_setup: false
retry_strategy:
max_retries: 1
import:
dsn: '%env(MESSENGER_TRANSPORT_DSN_IMPORT)%'
options:
auto_setup: false
retry_strategy:
max_retries: 1
analyze:
dsn: '%env(MESSENGER_TRANSPORT_DSN_ANALYZE)%'
options:
auto_setup: false
retry_strategy:
max_retries: 1
routing:
'App\Message\ExportMessage': export
'App\Message\ImportMessage': import
'App\Message\AnalyzeInvoiceMessage': analyze
bref_messenger:
sqs: true # Register the SQS transport
Do you know of anything I should be doing so that the authorization works with newer versions of bref/symfony-messenger
and bref/bref
?
I've been struggling with this for days so if you have any idea of what could be the issue here please let me know.
Thank you
Hi ! ✋
I'm trying to use SQS queue and I keep getting the same error :
I'm using API platform based on symfony then i'm using bref configuration for symfony.
The Amazon SQS queue "heroad-sqs-dev-Queue-10KLY4X240HKO" does not exists (or you don't have permissions on it), and can't be created when an account is provided.'
To explain what i want to do :
I have my main app ' web ' wich is an API i want to call a SQS queue to do a long task because the 29 second timeout is not suffisent for my task.
What i'm expecting is when i call my API from this special endpoint my worker will do the job in background without that 29 second timeout and sending me a notification when the task is finished.
here is my simple configuration in my serverless.yml :
provider:
name: aws
region: eu-west-3
runtime: provided.al2
environment:
APP_ENV: stagging
resources:
Resources:
Queue:
Type: AWS::SQS::Queue
Properties:
# This needs to be at least 6 times the lambda function's timeout
# See https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
VisibilityTimeout: '960'
RedrivePolicy:
deadLetterTargetArn: !GetAtt DeadLetterQueue.Arn
# Jobs will be retried 5 times
# The number needs to be at least 5 per https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
maxReceiveCount: 5
# The dead letter queue is a SQS queue that receives messages that failed to be processed
DeadLetterQueue:
Type: AWS::SQS::Queue
Properties:
# Messages are stored up to 14 days (the max)
MessageRetentionPeriod: 1209600
plugins:
- ./vendor/bref/bref
package:
exclude:
- node_modules/**
- tests/**
- var/**
- public/build/**'
functions:
# This function runs the Symfony website/API
web:
handler: public/index.php
timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
layers:
- ${bref:layer.php-74-fpm}
events:
- httpApi: '*'
worker:
handler: bin/consumer.php
timeout: 20 # in seconds
reservedConcurrency: 5 # max. 5 messages processed in parallel
layers:
- ${bref:layer.php-74}
events:
# Read more at https://www.serverless.com/framework/docs/providers/aws/events/sqs/
- sqs:
arn: arn:aws:sqs:eu-west-3:508623790554:heroad-sqs-dev-Queue-10KLY4X240HKO
# Only 1 item at a time to simplify error handling
batchSize: 1
I'm using the same worker for symfony 5.1 because I'm on 5.3
My messenger.yaml :
framework:
messenger:
transports:
async: '%env(MESSENGER_TRANSPORT_DSN)%'
routing:
# async is whatever name you gave your transport above
'App\Message\GeneratePlanning': async
in my .env.stagging I've
MESSENGER_TRANSPORT_DSN=https://sqs.eu-west-3.amazonaws.com/508623790554/heroad-sqs-dev-Queue-10KLY4X240HKO
And finaly my bus dispatch in an API endpoint controller
/**
* @Route("/generate", methods={"GET"})
* @return JsonResponse|Response
* @throws \Exception
*/
public function generate(MessageBusInterface $bus)
{
$bus->dispatch(new GeneratePlanning('hello world'));
return new JsonResponse(['success' => 'success'], 201);
}
First break at : vendor/symfony/amazon-sqs-messenger/Transport/Connection.php (line 276)
Getting deprecation notices.
1x: Since symfony/dependency-injection 5.1: The "Psr\Container\ContainerInterface" autowiring alias is deprecated. Define it explicitly in your app if you want to keep using it. It is being referenced by the "Bref\Symfony\Messenger\Service\Sns\SnsTransportFactory" service.
1x: Since symfony/dependency-injection 5.1: The "Psr\Container\ContainerInterface" autowiring alias is deprecated. Define it explicitly in your app if you want to keep using it. It is being referenced by the "Bref\Symfony\Messenger\Service\EventBridge\EventBridgeTransportFactory" service.
Would be grat to fix them. Thank you!
Hi all,
Thx all for the job you do.
I got a problem by using the bref/symfony-messenger on version 0.3.1, i got this return :
"HTTP 403 returned for \u0022https://sqs.eu-west-3.amazonaws.com/\u0022."
I solved this problem by using the 0.2.0 version.
Any idea why i got this error ? Something to change in configuration ?
Didn't see anything in changlog ;)
Thx for advance.
Hi,
It seems that symfony 6 isn't supported, could this be done?
Thank you :)
Hello !
We had few weird issues since we enabled partialBatchFailure.
The main idea is we had some messages that were handled successfully by Symfony BUT requeue in SQS.
The missing clue I found this morning, it happens only when we have another failure in the batch.
So partialbatchFailure become my first target and I just find those lines :
symfony-messenger/src/Service/Sqs/SqsConsumer.php
Lines 63 to 65 in 854efa7
I totally understand why we want to markAsFailed to preserve message order BUT why do we want to handle them when we're going to requeue them by marking them as failed ?
In our situation it leads to some software issue because the batch got 2 events that mutate the same data. So the last win, and as the whole events were marked as failed, the 1st failed at the second run to mutate again because the 2nd did also its job.
Is there anything I miss @t-richard ?
I can totally help with the patch of course but I want to be sure we are ok on the solution ^^
We are processing messages from different producers in our Lambdas, so we need different Serializers. This is an example of our definition:
framework:
messenger:
transports:
priority:
dsn: '%env(xxx)%'
serializer: messenger.transport.symfony_serializer
dataUpdate:
dsn: '%env(xxx)%'
serializer: App\DataUpdate\DataUpdateMessageSerializer
priceUpdate:
dsn: '%env(xxx)%'
serializer: App\PriceUpdate\PriceUpdateMessageSerializer
According to the documentation, I tried to specify a serializer for SqsConsumer. But how to add them there? It is possible to specify only 1 serializer there.
This was released in 0.5.18.
Hey there,
By browsing the code source around the SqsConsumer
and the SqsTransport
I could not find a way to "cancel" an event (delete it or send it to a dead letter queue).
Symfony messenger allow to throw an UnrecoverableMessageHandlingException
exception to stop to stop retrying a message. It could be nice to have this behaviour implemented in the bref SQS bridge.
What did you think?
Since brefphp has now support for partial batch failure, (brefphp/bref#1113) I was pretty confident to implement it into the SqsConsumer.
Except I'm not sure about the behavior we want.
Decorates the whole loop iteration of SqsConsumer with a try cach and markAsFailed $record in catch block looks a good idea at the first glance. But doing this will prevent to reach the stopfailure method that currently log the exception. So it will lead to losing this log.
I'm available to make the implementation but if anyone comes with a better idea how handle it, it would be great.
Hi,
Do you plan to support the Amazon SQS JSON API, which is implemented in version ^2 of async-aws/sqs package https://github.com/async-aws/sqs/blob/master/CHANGELOG.md
This might be as easy as allowing
"async-aws/sqs": "^1.2|^2.0"
If you are willing to merge it, I can give it a try?
Somehow when the consumer tries to handle a message the MessageBus doesn't have any middleware registered at Symfony\Component\Messenger\MessageBus
. This is only the case when consuming async. The regular sync messages all get handled correctly.
I've debugged it extensively. The messages are definitely 'consumed', but nothing happens and they're tried over and over.
I have a custom event.bus with async transport configured like this:
# config/packages/messenger.yaml
framework:
messenger:
default_bus: command.bus
buses:
command.bus:
...
query.bus:
...
event.bus:
default_middleware: allow_no_handlers
middleware:
- validation
- doctrine_transaction
transports:
...
async:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
serializer: messenger.transport.symfony_serializer
options:
auto_setup: false
...
routing:
...
Application\Event\Async\AsyncEvent: async
And this is in services.yaml:
Bref\Symfony\Messenger\Service\Sqs\SqsConsumer:
public: true
autowire: true
arguments:
# Pass the transport name used in config/packages/messenger.yaml
$transportName: 'async'
# true enables partial SQS batch failure
# Enabling this without proper SQS config will consider all your messages successful
# See https://bref.sh/docs/function/handlers.html#partial-batch-response for more details.
$partialBatchFailure: false
$bus: '@event.bus'
$logger: '@logger'
$serializer: '@messenger.transport.symfony_serializer'
I'm currently using Symfony 6.3.3 and Bref 1.7.32
Running the consumer locally with the vendor/bin/bref local worker
command works perfectly.
Might Bref 2 work? I'll try and upgrade tomorrow.
I was wondering if it is an idea now symfony/amazon-sqs-messenger is released, to use the Transport from that package so this package handles only the serverless consumer side?
Does that make sense?
I doesn't seem right to keep that functionality in 2 places?
Hello,
sometimes we get these two messages in our error logs:
SQS record with id "UUID" failed to be processed. But failure was marked as unrecoverable. Message will be acknowledged.
unlabeled event
These errors are logged here: https://github.com/brefphp/symfony-messenger/blob/master/src/Service/Sqs/SqsConsumer.php#L94. I am not able to reproduce this error, so it is very hard to debug.
Any idea when this error could occur? I do not know why only the message is logged and not the whole Exception. Can I send a PR logging the Exception instead of the message?
Ie, messages should be retried on the queue.
With a setup using a function to use SNS, I am getting the following error:
{
"errorType": "Symfony\\Component\\Messenger\\Exception\\MessageDecodingFailedException",
"errorMessage": "Could not decode message using PHP serialization: {\"notificationType\":\"Bounce\",\"bounce\":{\"feedbackId\":\"01070177b7c56aa1-117088ce-e70c-42c6-9120-42aacdde7907-000000\",\"bounceType\":\"Permanent\",\"bounceSubType\":\"General\",\"bouncedRecipients\":[{\"emailAddress\":\"[email protected]\",\"action\":\"failed\",\"status\":\"5.1.1\",\"diagnosticCode\":\"smtp; 550 5.1.1 user unknown\"}],\"timestamp\":\"2021-02-19T00:51:44.000Z\",\"remoteMtaIp\":\"3.226.40.239\",\"reportingMTA\":\"dsn; b224-13.smtp-out.eu-central-1.amazonses.com\"},\"mail\":{\"timestamp\":\"2021-02-19T00:51:42.822Z\",\"source\":\"[email protected]\",\"sourceArn\":\"arn:aws:ses:eu-central-1:544387708820:identity/[email protected]\",\"sourceIp\":\"178.132.211.234\",\"sendingAccountId\":\"544387708820\",\"messageId\":\"01070177b7c56466-279ebebc-6da2-4a1c-af23-b78eac23a6da-000000\",\"destination\":[\"[email protected]\"]}}.",
"stack": [
"#0 /var/task/vendor/symfony/messenger/Transport/Serialization/PhpSerializer.php(38): Symfony\\Component\\Messenger\\Transport\\Serialization\\PhpSerializer->safelyUnserialize()",
"#1 /var/task/vendor/bref/symfony-messenger/src/Service/Sns/SnsConsumer.php(40): Symfony\\Component\\Messenger\\Transport\\Serialization\\PhpSerializer->decode()",
"#2 /var/task/vendor/bref/bref/src/Event/Sns/SnsHandler.php(18): Bref\\Symfony\\Messenger\\Service\\Sns\\SnsConsumer->handleSns()",
"#3 /var/task/vendor/bref/bref/src/Runtime/Invoker.php(29): Bref\\Event\\Sns\\SnsHandler->handle()",
"#4 /var/task/vendor/bref/bref/src/Runtime/LambdaRuntime.php(102): Bref\\Runtime\\Invoker->invoke()",
"#5 /opt/bref/bootstrap.php(43): Bref\\Runtime\\LambdaRuntime->processNextEvent()",
"#6 {main}"
]
}
Any clue of what I'm doing wrong?
Here's some more information about the application:
config/packages/messenger.yaml
:
framework:
messenger:
transports:
async: '%env(MESSENGER_TRANSPORT_DSN)%'
routing:
'App\Message\SesMessage': async
src/Message/SesMessage.php
<?php
namespace App\Message;
class SesMessage
{
private $content;
public function __construct(string $content)
{
$this->content = $content;
}
public function getContent(): string
{
return $this->content;
}
}
src/MessageHandler/SesNotificationHandler.php
<?php
namespace App\MessageHandler;
use App\Message\SesMessage;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
class SesNotificationHandler implements MessageHandlerInterface
{
public function __invoke(SesMessage $message)
{
}
}
bin/consumer.php
<?php declare(strict_types=1);
use App\Kernel;
use Bref\Symfony\Messenger\Service\Sns\SnsConsumer;
use Symfony\Component\Dotenv\Dotenv;
require dirname(__DIR__) . '/vendor/autoload.php';
(new Dotenv())->bootEnv(dirname(__DIR__) . '/.env');
$kernel = new Kernel($_SERVER['APP_ENV'], (bool)$_SERVER['APP_DEBUG']);
$kernel->boot();
// Return the Bref consumer service
return $kernel->getContainer()->get(SnsConsumer::class);
serverless.yml
...
functions:
worker:
handler: bin/consumer.php
timeout: 20
reservedConcurrency: 5
layers:
- ${bref:layer.php-74}
events:
- sns:
arn: arn:aws:sns:eu-central-1:1234567890:Test
% bin/console messenger:consume --limit=2500 --time-limit=600 --sleep=30 -vv
[OK] Consuming messages from transports "sqs".
// The worker will automatically exit once it has processed 2500 messages, been running for 600s or received a stop
// signal via the messenger:stop-workers command.
// Quit the worker with CONTROL-C.
In SqsTransport.php line 73:
[Exception]
Not implemented
Exception trace:
at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/bref/symfony-messenger/src/Service/Sqs/SqsTransport.php:73
Bref\Symfony\Messenger\Service\Sqs\SqsTransport->get() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/messenger/Worker.php:76
Symfony\Component\Messenger\Worker->run() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/messenger/Command/ConsumeMessagesCommand.php:202
Symfony\Component\Messenger\Command\ConsumeMessagesCommand->execute() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/console/Command/Command.php:255
Symfony\Component\Console\Command\Command->run() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/console/Application.php:1019
Symfony\Component\Console\Application->doRunCommand() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/framework-bundle/Console/Application.php:97
Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/console/Application.php:271
Symfony\Component\Console\Application->doRun() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/framework-bundle/Console/Application.php:83
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/vendor/symfony/console/Application.php:147
Symfony\Component\Console\Application->run() at /Users/dplatt/Sites/tracking.ukwm.co.uk/app/bin/console:42
messenger:consume [-l|--limit LIMIT] [-m|--memory-limit MEMORY-LIMIT] [-t|--time-limit TIME-LIMIT] [--sleep SLEEP] [-b|--bus BUS] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command> [<receivers>...]
I'm not sure how I'm supposed to implement this.
I have an app that is based on RabbitMQ, and upgrading it to Symfony Messenger.
Any suggestion?
dcf9e264-9bfe-5b94-b98d-b553c2ade3f0 Invoke Error
{
"errorType": "Symfony\\Component\\Messenger\\Exception\\MessageDecodingFailedException",
"errorMessage": "Encoded envelope should have at least a \"body\" and some \"headers\".",
"stack": [
"#0 /var/task/vendor/bref/symfony-messenger/src/Service/Sqs/SqsConsumer.php(38): Symfony\\Component\\Messenger\\Transport\\Serialization\\Serializer->decode()",
"#1 /var/task/vendor/bref/bref/src/Event/Sqs/SqsHandler.php(18): Bref\\Symfony\\Messenger\\Service\\Sqs\\SqsConsumer->handleSqs()",
"#2 /var/task/vendor/bref/bref/src/Runtime/LambdaRuntime.php(104): Bref\\Event\\Sqs\\SqsHandler->handle()",
"#3 /opt/bref/bootstrap.php(38): Bref\\Runtime\\LambdaRuntime->processNextEvent()",
"#4 {main}"
]
}
Reason is that SqsConsumer
does not provide header data from SQS message attributes.
\Bref\Symfony\Messenger\Service\Sqs\SqsConsumer::handleSqs
In the send method of the EventBridgeTransport class I noticed that we don't have control over the DetailType parameter, and this parameter is very important in defining the EventBridge rules.
I noticed it's not on version 1.0 yet, I'd like to know what your plans are.
We just detect (in fact we detected it a long time ago but we had no time to deal with it :p ) that the partialBatchFailure feature does not work correctly for fifo queue.
At this time, if a message failed in a fifo queue, every messages after it are marked as failed.
In fact if the message had a message group id, we should only marked as failed the next messages with the same message group id.
Currently, a failing event could block a whole batch of events event if you configured correctly each messageGroupId.
I will work on the PR of course, I'm not yet sure how get back the message group id ATM
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.