343d28e3d1
This PR was squashed before being merged into the 4.3-dev branch (closes #30754).
Discussion
----------
[Messenger] New messenger:stop-workers Command
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | Kinda of #29451
| License | MIT
| Doc PR | symfony/symfony-docs#11236
o/ me again.
This requires and is built on top of #30708
When you deploy, all workers need to be stopped and restarted. That's not currently possible, unless you manually track the pids and send a SIGTERM signal. We can make that much easier :).
Now run:
```
bin/console messenger:stop-workers
```
And it will signal to all workers (even if they're distributed on other servers) that they should stop, once they finish processing their current message. This is done via a key in `cache.app`.
Cheers!
Commits
-------
58971627f5
[Messenger] New messenger:stop-workers Command
115 lines
7.1 KiB
Markdown
115 lines
7.1 KiB
Markdown
CHANGELOG
|
|
=========
|
|
|
|
4.3.0
|
|
-----
|
|
|
|
* [BC BREAK] The `Envelope::__construct()` signature changed:
|
|
you can no longer pass an unlimited number of stamps as the second,
|
|
third, fourth, arguments etc: stamps are now an array passed to the
|
|
second argument.
|
|
* [BC BREAK] The `MessageBusInterface::dispatch()` signature changed:
|
|
a second argument `array $stamps = []` was added.
|
|
* Added new `messenger:stop-workers` command that sends a signal
|
|
to stop all `messenger:consume` workers.
|
|
* [BC BREAK] The `TransportFactoryInterface::createTransport()` signature
|
|
changed: a required 3rd `SerializerInterface` argument was added.
|
|
* Added a new `SyncTransport` along with `ForceCallHandlersStamp` to
|
|
explicitly handle messages synchronously.
|
|
* Added optional parameter `prefetch_count` in connection configuration,
|
|
to setup channel prefetch count.
|
|
* New classes: `RoutableMessageBus`, `AddBusNameStampMiddleware`
|
|
and `BusNameStamp` were added, which allow you to add a bus identifier
|
|
to the `Envelope` then find the correct bus when receiving from
|
|
the transport. See `ConsumeMessagesCommand`.
|
|
* The optional `$busNames` constructor argument of the class `ConsumeMessagesCommand` was removed.
|
|
* [BC BREAK] 3 new methods were added to `ReceiverInterface`:
|
|
`ack()`, `reject()` and `get()`. The methods `receive()`
|
|
and `stop()` were removed.
|
|
* [BC BREAK] Error handling was moved from the receivers into
|
|
`Worker`. Implementations of `ReceiverInterface::handle()`
|
|
should now allow all exceptions to be thrown, except for transport
|
|
exceptions. They should also not retry (e.g. if there's a queue,
|
|
remove from the queue) if there is a problem decoding the message.
|
|
* [BC BREAK] `RejectMessageExceptionInterface` was removed and replaced
|
|
by `Symfony\Component\Messenger\Exception\UnrecoverableMessageHandlingException`,
|
|
which has the same behavior: a message will not be retried
|
|
* The default command name for `ConsumeMessagesCommand` was
|
|
changed from `messenger:consume-messages` to `messenger:consume`
|
|
* `ConsumeMessagesCommand` has two new optional constructor arguments
|
|
* [BC BREAK] The first argument to Worker changed from a single
|
|
`ReceiverInterface` to an array of `ReceiverInterface`.
|
|
* `Worker` has 3 new optional constructor arguments.
|
|
* The `Worker` class now handles calling `pcntl_signal_dispatch()` the
|
|
receiver no longer needs to call this.
|
|
* The `AmqpSender` will now retry messages using a dead-letter exchange
|
|
and delayed queues, instead of retrying via `nack()`
|
|
* Senders now receive the `Envelope` with the `SentStamp` on it. Previously,
|
|
the `Envelope` was passed to the sender and *then* the `SentStamp`
|
|
was added.
|
|
* `SerializerInterface` implementations should now throw a
|
|
`Symfony\Component\Messenger\Exception\MessageDecodingFailedException`
|
|
if `decode()` fails for any reason.
|
|
* [BC BREAK] The default `Serializer` will now throw a
|
|
`MessageDecodingFailedException` if `decode()` fails, instead
|
|
of the underlying exceptions from the Serializer component.
|
|
* Added `PhpSerializer` which uses PHP's native `serialize()` and
|
|
`unserialize()` to serialize messages to a transport
|
|
* [BC BREAK] If no serializer were passed, the default serializer
|
|
changed from `Serializer` to `PhpSerializer` inside `AmqpReceiver`,
|
|
`AmqpSender`, `AmqpTransport` and `AmqpTransportFactory`.
|
|
* Added `TransportException` to mark an exception transport-related
|
|
* [BC BREAK] If listening to exceptions while using `AmqpSender` or `AmqpReceiver`, `\AMQPException` is
|
|
no longer thrown in favor of `TransportException`.
|
|
* Deprecated `LoggingMiddleware`, pass a logger to `SendMessageMiddleware` instead.
|
|
* [BC BREAK] `Connection::__construct()` and `Connection::fromDsn()`
|
|
both no longer have `$isDebug` arguments.
|
|
* [BC BREAK] The Amqp Transport now automatically sets up the exchanges
|
|
and queues by default. Previously, this was done when in "debug" mode
|
|
only. Pass the `auto_setup` connection option to control this.
|
|
* Added a `SetupTransportsCommand` command to setup the transports
|
|
* Added a Doctrine transport. For example, use the `doctrine://default` DSN (this uses the `default` Doctrine entity manager)
|
|
|
|
4.2.0
|
|
-----
|
|
|
|
* Added `HandleTrait` leveraging a message bus instance to return a single
|
|
synchronous message handling result
|
|
* Added `HandledStamp` & `SentStamp` stamps
|
|
* All the changes below are BC BREAKS
|
|
* Senders and handlers subscribing to parent interfaces now receive *all* matching messages, wildcard included
|
|
* `MessageBusInterface::dispatch()`, `MiddlewareInterface::handle()` and `SenderInterface::send()` return `Envelope`
|
|
* `MiddlewareInterface::handle()` now require an `Envelope` as first argument and a `StackInterface` as second
|
|
* `EnvelopeAwareInterface` has been removed
|
|
* The signature of `Amqp*` classes changed to take a `Connection` as a first argument and an optional
|
|
`Serializer` as a second argument.
|
|
* `MessageSubscriberInterface::getHandledMessages()` return value has changed. The value of an array item
|
|
needs to be an associative array or the method name.
|
|
* `StampInterface` replaces `EnvelopeItemInterface` and doesn't extend `Serializable` anymore
|
|
* The `ConsumeMessagesCommand` class now takes an instance of `Psr\Container\ContainerInterface`
|
|
as first constructor argument
|
|
* The `EncoderInterface` and `DecoderInterface` have been replaced by a unified `Symfony\Component\Messenger\Transport\Serialization\SerializerInterface`.
|
|
* Renamed `EnvelopeItemInterface` to `StampInterface`
|
|
* `Envelope`'s constructor and `with()` method now accept `StampInterface` objects as variadic parameters
|
|
* Renamed and moved `ReceivedMessage`, `ValidationConfiguration` and `SerializerConfiguration` in the `Stamp` namespace
|
|
* Removed the `WrapIntoReceivedMessage` class
|
|
* `MessengerDataCollector::getMessages()` returns an iterable, not just an array anymore
|
|
* `HandlerLocatorInterface::resolve()` has been removed, use `HandlersLocator::getHandlers()` instead
|
|
* `SenderLocatorInterface::getSenderForMessage()` has been removed, use `SendersLocator::getSenders()` instead
|
|
* Classes in the `Middleware\Enhancers` sub-namespace have been moved to the `Middleware` one
|
|
* Classes in the `Asynchronous\Routing` sub-namespace have been moved to the `Transport\Sender\Locator` sub-namespace
|
|
* The `Asynchronous/Middleware/SendMessageMiddleware` class has been moved to the `Middleware` namespace
|
|
* `SenderInterface` has been moved to the `Transport\Sender` sub-namespace
|
|
* The `ChainHandler` and `ChainSender` classes have been removed
|
|
* `ReceiverInterface` and its implementations have been moved to the `Transport\Receiver` sub-namespace
|
|
* `ActivationMiddlewareDecorator` has been renamed `ActivationMiddleware`
|
|
* `AllowNoHandlerMiddleware` has been removed in favor of a new constructor argument on `HandleMessageMiddleware`
|
|
* The `ContainerHandlerLocator`, `AbstractHandlerLocator`, `SenderLocator` and `AbstractSenderLocator` classes have been removed
|
|
* `Envelope::all()` takes a new optional `$stampFqcn` argument and returns the stamps for the specified FQCN, or all stamps by their class name
|
|
* `Envelope::get()` has been renamed `Envelope::last()`
|
|
|
|
4.1.0
|
|
-----
|
|
|
|
* Introduced the component as experimental
|