Skip to content

Conversation

@Seldaek
Copy link

@Seldaek Seldaek commented Sep 21, 2010

see thread on ML for comments

@Seldaek
Copy link
Author

Seldaek commented Sep 27, 2010

Updated the branch to support the new Translator component

@Seldaek
Copy link
Author

Seldaek commented Sep 30, 2010

Rebased to latest master. Please let me know if you think this is dumb so that I stop working on it :)

@fabpot
Copy link
Owner

fabpot commented Oct 6, 2010

I think this is a good idea. I will look into it a bit more after I merge my changes for the Security Component ;)

@Seldaek
Copy link
Author

Seldaek commented Oct 17, 2010

And updated yet again for the {% include %} override

@Seldaek
Copy link
Author

Seldaek commented Oct 20, 2010

And updated for the new {% include %} override ;)

Just one problem I noticed though, the way I load all helpers create instances of all the helper classes and if they're not loaded it explodes, so I patched the Container to be able to include stuff without Exceptions, see: http://github.com/fabpot/symfony/pull/97

@fabpot
Copy link
Owner

fabpot commented Oct 21, 2010

I'm not sure I understand the problem here. What do you mean by "if they're not loaded it explodes"? AFAIU, if a helper is defined with the tag, it should be available and you should be able to "load" it, no?

@Seldaek
Copy link
Author

Seldaek commented Oct 21, 2010

Ok sorry I was a bit tired and in a hurry, that wasn't clear. What happened is that I didn't have the security.config enabled in my config, so the security services were not defined, and it tried to fetch the SecurityExtension or something and it exploded obviously. So with my other pull request in (specifically http://github.com/Seldaek/symfony/commit/7435c34f13be25d2e4f0878a97adafd76bd1e6e4), the invalidBehavior is cascading through the ->get() calls to the Container, and I can do a fetch safely without having to deal with an exception if some service isn't loaded.

I hope that's a bit more clear :)

@Seldaek
Copy link
Author

Seldaek commented Nov 15, 2010

Updated the branch to remove the NULL_ON_INVALID_REFERENCE and I got the old problem again. Made a pull request to fix it: #168

@henrikbjorn
Copy link

If i am reading correctly by having TwigHelperInterface from TwigBundle you are requirering the TwigBundle for ALL helpers.

@Seldaek
Copy link
Author

Seldaek commented Dec 12, 2010

Yes, all helpers that want to support Twig indeed rely on the TwigBundle being present, since it's shipped in Symfony itself, I don't see the problem. But if it really is a problem I could do a method_exists() call instead of the instanceof.

@henrikbjorn
Copy link

If i dont use twig i wouldnt have the twigbundle bundled with my project and further i think that all the bundles except FrameworkBundle should be in their own repositories so that Symfony2 would be as lightweight as possible.

@Seldaek
Copy link
Author

Seldaek commented Dec 12, 2010

The TwigBundle is made of 33 files, it's not gonna bloat the hell out of your Symfony install, but as I said if there is an agreement that this is a bad idea, I can refactor it to use method_exists instead.

@fabpot
Copy link
Owner

fabpot commented Dec 20, 2010

I think these changes are made obsolete now that Twigs supports functions (creating a tag should now be pretty rare). What do you think?

@Seldaek
Copy link
Author

Seldaek commented Dec 20, 2010

It is definitely not as necessary and helpful as before, but I don't know if that makes it obsolete. I won't push for it, but I think it still is nice to have.

@fabpot
Copy link
Owner

fabpot commented Jan 5, 2011

After some more time working with Twig functions, I'm now convinced that people will rarely create new tags. Also, with the removal of SimpleTokenParser and the _view variable, I think it makes even less sense to have the coupling between PHP helpers and Twig tags.

@Seldaek
Copy link
Author

Seldaek commented Jan 5, 2011

Agreed, I've stopped using it in my project anyway. It still is a bit annoying that you've to wrap all templating helpers into twig extensions + twig function proxies though, but I'm not really sure what we can do to fix that. Maybe a generic twig extension that takes all templating helpers and maps all their functions to twig_functions? Not sure that makes any sense though.

fabpot pushed a commit that referenced this pull request Mar 21, 2024
…hen publishing a message. (jwage)

This PR was squashed before being merged into the 6.4 branch.

Discussion
----------

[Messenger] [Amqp] Handle AMQPConnectionException when publishing a message.

| Q             | A
| ------------- | ---
| Branch?       | 6.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Issues        | Fix symfony#36538 Fix symfony#48241
| License       | MIT

If you have a message handler that dispatches messages to another queue, you can encounter `AMQPConnectionException` with the message "Library error: a SSL error occurred" or "a socket error occurred"  depending on if you are using tls or not or if you are running behind a load balancer or not.

You can manually reproduce this issue by dispatching a message where the handler then dispatches another message to a different queue, then go to rabbitmq admin and close the connection manually, then dispatch another message and when the message handler goes to dispatch the other message, you will get this exception:

```
a socket error occurred
#0 /vagrant/vendor/symfony/amqp-messenger/Transport/AmqpTransport.php(60): Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpSender->send()
#1 /vagrant/vendor/symfony/messenger/Middleware/SendMessageMiddleware.php(62): Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpTransport->send()
#2 /vagrant/vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php(34): Symfony\Component\Messenger\Middleware\SendMessageMiddleware->handle()
#3 /vagrant/vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php(61): Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware->handle()
#4 /vagrant/vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php(41): Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware->handle()
#5 /vagrant/vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php(37): Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware->handle()
#6 /vagrant/vendor/symfony/messenger/Middleware/TraceableMiddleware.php(40): Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware->handle()
#7 /vagrant/vendor/symfony/messenger/MessageBus.php(70): Symfony\Component\Messenger\Middleware\TraceableMiddleware->handle()
#8 /vagrant/vendor/symfony/messenger/TraceableMessageBus.php(38): Symfony\Component\Messenger\MessageBus->dispatch()
#9 /vagrant/src/Messenger/MessageBus.php(37): Symfony\Component\Messenger\TraceableMessageBus->dispatch()
#10 /vagrant/vendor/symfony/mailer/Mailer.php(66): App\Messenger\MessageBus->dispatch()
#11 /vagrant/src/Mailer/Mailer.php(83): Symfony\Component\Mailer\Mailer->send()
#12 /vagrant/src/Mailer/Mailer.php(96): App\Mailer\Mailer->send()
#13 /vagrant/src/MessageHandler/Trading/StrategySubscriptionMessageHandler.php(118): App\Mailer\Mailer->sendEmail()
#14 /vagrant/src/MessageHandler/Trading/StrategySubscriptionMessageHandler.php(72): App\MessageHandler\Trading\StrategySubscriptionMessageHandler->handle()
#15 /vagrant/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php(152): App\MessageHandler\Trading\StrategySubscriptionMessageHandler->__invoke()
#16 /vagrant/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php(91): Symfony\Component\Messenger\Middleware\HandleMessageMiddleware->callHandler()
#17 /vagrant/vendor/symfony/messenger/Middleware/SendMessageMiddleware.php(71): Symfony\Component\Messenger\Middleware\HandleMessageMiddleware->handle()
#18 /vagrant/vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php(34): Symfony\Component\Messenger\Middleware\SendMessageMiddleware->handle()
#19 /vagrant/vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php(68): Symfony\Component\Messenger\Middleware\FailedMessageProcessingMiddleware->handle()
#20 /vagrant/vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php(41): Symfony\Component\Messenger\Middleware\DispatchAfterCurrentBusMiddleware->handle()
#21 /vagrant/vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php(37): Symfony\Component\Messenger\Middleware\RejectRedeliveredMessageMiddleware->handle()
#22 /vagrant/vendor/symfony/messenger/Middleware/TraceableMiddleware.php(40): Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware->handle()
#23 /vagrant/vendor/symfony/messenger/MessageBus.php(70): Symfony\Component\Messenger\Middleware\TraceableMiddleware->handle()
#24 /vagrant/vendor/symfony/messenger/TraceableMessageBus.php(38): Symfony\Component\Messenger\MessageBus->dispatch()
#25 /vagrant/vendor/symfony/messenger/RoutableMessageBus.php(54): Symfony\Component\Messenger\TraceableMessageBus->dispatch()
#26 /vagrant/vendor/symfony/messenger/Worker.php(162): Symfony\Component\Messenger\RoutableMessageBus->dispatch()
#27 /vagrant/vendor/symfony/messenger/Worker.php(109): Symfony\Component\Messenger\Worker->handleMessage()
#28 /vagrant/vendor/symfony/messenger/Command/ConsumeMessagesCommand.php(238): Symfony\Component\Messenger\Worker->run()
#29 /vagrant/vendor/symfony/console/Command/Command.php(326): Symfony\Component\Messenger\Command\ConsumeMessagesCommand->execute()
#30 /vagrant/vendor/symfony/console/Application.php(1096): Symfony\Component\Console\Command\Command->run()
#31 /vagrant/vendor/symfony/framework-bundle/Console/Application.php(126): Symfony\Component\Console\Application->doRunCommand()
#32 /vagrant/vendor/symfony/console/Application.php(324): Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand()
#33 /vagrant/vendor/symfony/framework-bundle/Console/Application.php(80): Symfony\Component\Console\Application->doRun()
#34 /vagrant/vendor/symfony/console/Application.php(175): Symfony\Bundle\FrameworkBundle\Console\Application->doRun()
#35 /vagrant/vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php(49): Symfony\Component\Console\Application->run()
#36 /vagrant/vendor/autoload_runtime.php(29): Symfony\Component\Runtime\Runner\Symfony\ConsoleApplicationRunner->run()
#37 /vagrant/bin/console(11): require_once('...')
#38 {main}
```

TODO:

- [x] Add test for retry logic when publishing messages

Commits
-------

f123370 [Messenger] [Amqp] Handle AMQPConnectionException when publishing a message.
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants