Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9f55837

Browse files
committed
Merge branch '6.1' into 6.2
* 6.1: Update ci.yaml Add documentation of Supervisor BACKOFF strategy Messenger process managers Updated SymfonyCloud link Proper line numbers on Doctrine Persisting example Changing `monolog.logger` to `logger` Remove obsolete warning
2 parents1cbe327 +5404ee4 commit9f55837

File tree

6 files changed

+133
-26
lines changed

6 files changed

+133
-26
lines changed

‎.github/workflows/ci.yaml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ on:
88
branches-ignore:
99
-'github-comments'
1010

11+
permissions:
12+
contents:read
13+
1114
jobs:
1215
symfony-docs-builder-build:
1316
name:Build (symfony-tools/docs-builder)

‎components/config/resources.rst‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@
44
Loading Resources
55
=================
66

7-
..caution::
8-
9-
The ``IniFileLoader`` parses the file contents using the
10-
:phpfunction:`parse_ini_file` function. Therefore, you can only set
11-
parameters to string values. To set parameters to other data types
12-
(e.g. boolean, integer, etc), the other loaders are recommended.
13-
147
Loaders populate the application's configuration from different sources
158
like YAML files. The Config component defines the interface for such
169
loaders. The:doc:`Dependency Injection</components/dependency_injection>`

‎configuration.rst‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1115,4 +1115,4 @@ And all the other topics related to configuration:
11151115
.. _`Learn the XML syntax`:https://en.wikipedia.org/wiki/XML
11161116
.. _`environment variables`:https://en.wikipedia.org/wiki/Environment_variable
11171117
.. _`symbolic links`:https://en.wikipedia.org/wiki/Symbolic_link
1118-
.. _`utilities to manage env vars`:https://symfony.com/doc/master/cloud/cookbooks/env.html
1118+
.. _`utilities to manage env vars`:https://symfony.com/doc/current/cloud/env.html

‎doctrine.rst‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -394,21 +394,21 @@ Take a look at the previous example in more detail:
394394

395395
.. _doctrine-entity-manager:
396396

397-
* **line14** The ``ManagerRegistry $doctrine`` argument tells Symfony to
397+
* **line13** The ``ManagerRegistry $doctrine`` argument tells Symfony to
398398
:ref:`inject the Doctrine service<services-constructor-injection>` into the
399399
controller method.
400400

401-
* **line16** The ``$doctrine->getManager()`` method gets Doctrine's
401+
* **line15** The ``$doctrine->getManager()`` method gets Doctrine's
402402
*entity manager* object, which is the most important object in Doctrine. It's
403403
responsible for saving objects to, and fetching objects from, the database.
404404

405-
* **lines18-21** In this section, you instantiate and work with the ``$product``
405+
* **lines17-20** In this section, you instantiate and work with the ``$product``
406406
object like any other normal PHP object.
407407

408-
* **line24** The ``persist($product)`` call tells Doctrine to "manage" the
408+
* **line23** The ``persist($product)`` call tells Doctrine to "manage" the
409409
``$product`` object. This does **not** cause a query to be made to the database.
410410

411-
* **line27** When the ``flush()`` method is called, Doctrine looks through
411+
* **line26** When the ``flush()`` method is called, Doctrine looks through
412412
all of the objects that it's managing to see if they need to be persisted
413413
to the database. In this example, the ``$product`` object's data doesn't
414414
exist in the database, so the entity manager executes an ``INSERT`` query,

‎messenger.rst‎

Lines changed: 112 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -486,23 +486,30 @@ Deploying to Production
486486

487487
On production, there are a few important things to think about:
488488

489-
**Use Supervisor to keep your worker(s) running**
489+
**Usea Process Manager likeSupervisor or systemd to keep your worker(s) running**
490490
You'll want one or more "workers" running at all times. To do that, use a
491-
process control system like:ref:`Supervisor<messenger-supervisor>`.
491+
process control system like:ref:`Supervisor<messenger-supervisor>`
492+
or:ref:`systemd<messenger-systemd>`.
492493

493494
**Don't Let Workers Run Forever**
494495
Some services (like Doctrine's ``EntityManager``) will consume more memory
495496
over time. So, instead of allowing your worker to run forever, use a flag
496497
like ``messenger:consume --limit=10`` to tell your worker to only handle 10
497-
messages before exiting (thenSupervisor will create a new process). There
498+
messages before exiting (thenthe process manager will create a new process). There
498499
are also other options like ``--memory-limit=128M`` and ``--time-limit=3600``.
499500

501+
**Stopping Workers That Encounter Errors**
502+
If a worker dependency like your database server is down, or timeout is reached,
503+
you can try to add:ref:`reconnect logic<middleware-doctrine>`, or just quit
504+
the worker if it receives too many errors with the ``--failure-limit`` option of
505+
the ``messenger:consume`` command.
506+
500507
**Restart Workers on Deploy**
501508
Each time you deploy, you'll need to restart all your worker processes so
502509
that they see the newly deployed code. To do this, run ``messenger:stop-workers``
503510
on deployment. This will signal to each worker that it should finish the message
504-
it's currently handling and should shut down gracefully. Then,Supervisor will create
505-
new worker processes. The command uses the:ref:`app<cache-configuration-with-frameworkbundle>`
511+
it's currently handling and should shut down gracefully. Then,the process manager
512+
will createnew worker processes. The command uses the:ref:`app<cache-configuration-with-frameworkbundle>`
506513
cache internally - so make sure this is configured to use an adapter you like.
507514

508515
**Use the Same Cache Between Deploys**
@@ -665,11 +672,25 @@ times:
665672
startsecs=0
666673
autostart=true
667674
autorestart=true
675+
startretries=10
668676
process_name=%(program_name)s_%(process_num)02d
669677
670678
Change the ``async`` argument to use the name of your transport (or transports)
671679
and ``user`` to the Unix user on your server.
672680

681+
..caution::
682+
683+
During a deployment, something might be unavailable (e.g. the
684+
database) causing the consumer to fail to start. In this situation,
685+
Supervisor will try ``startretries`` number of times to restart the
686+
command. Make sure to change this setting to avoid getting the command
687+
in a FATAL state, which will never restart again.
688+
689+
Each restart, Supervisor increases the delay by 1 second. For instance, if
690+
the value is ``10``, it will wait 1 sec, 2 sec, 3 sec, etc. This gives the
691+
service a total of 55 seconds to become available again. Increase the
692+
``startretries`` setting to cover the maximum expected downtime.
693+
673694
If you use the Redis Transport, note that each worker needs a unique consumer
674695
name to avoid the same message being handled by multiple workers. One way to
675696
achieve this is to set an environment variable in the Supervisor configuration
@@ -692,7 +713,7 @@ Next, tell Supervisor to read your config and start your workers:
692713
See the `Supervisor docs`_ for more details.
693714

694715
Graceful Shutdown
695-
~~~~~~~~~~~~~~~~~
716+
.................
696717

697718
If you install the `PCNTL`_ PHP extension in your project, workers will handle
698719
the ``SIGTERM`` POSIX signal to finish processing their current message before
@@ -708,6 +729,88 @@ of the desired grace period in seconds) in order to perform a graceful shutdown:
708729
[program:x]
709730
stopwaitsecs=20
710731
732+
.. _messenger-systemd:
733+
734+
Systemd Configuration
735+
~~~~~~~~~~~~~~~~~~~~~
736+
737+
While Supervisor is a great tool, it has the disadvantage that you need system
738+
access to run it. Systemd has become the standard on most Linux distributions,
739+
and has a good alternative called *user services*.
740+
741+
Systemd user service configuration files typically live in a ``~/.config/systemd/user``
742+
directory. For example, you can create a new ``messenger-worker.service`` file. Or a
743+
``messenger-worker@.service`` file if you want more instances running at the same time:
744+
745+
..code-block::ini
746+
747+
[Unit]
748+
Description=Symfony messenger-consume %i
749+
750+
[Service]
751+
ExecStart=php /path/to/your/app/bin/console messenger:consume async --time-limit=3600
752+
Restart=always
753+
RestartSec=30
754+
755+
[Install]
756+
WantedBy=default.target
757+
758+
Now, tell systemd to enable and start one worker:
759+
760+
..code-block::terminal
761+
762+
$ systemctl --user enable messenger-worker@1.service
763+
$ systemctl --user start messenger-worker@1.service
764+
765+
# to enable and start 20 workers
766+
$ systemctl --user enable messenger-worker@{1..20}.service
767+
$ systemctl --user start messenger-worker@{1..20}.service
768+
769+
If you change your service config file, you need to reload the daemon:
770+
771+
..code-block::terminal
772+
773+
$ systemctl --user daemon-reload
774+
775+
To restart all your consumers:
776+
777+
..code-block::terminal
778+
779+
$ systemctl --user restart messenger-consume@*.service
780+
781+
The systemd user instance is only started after the first login of the
782+
particular user. Consumer often need to start on system boot instead.
783+
Enable lingering on the user to activate that behavior:
784+
785+
..code-block::terminal
786+
787+
$ loginctl enable-linger <your-username>
788+
789+
Logs are managed by journald and can be worked with using the journalctl
790+
command:
791+
792+
..code-block::terminal
793+
794+
# follow logs of consumer nr 11
795+
$ journalctl -f --user-unit messenger-consume@11.service
796+
797+
# follow logs of all consumers
798+
$ journalctl -f --user-unit messenger-consume@*
799+
800+
# follow all logs from your user services
801+
$ journalctl -f _UID=$UID
802+
803+
See the `systemd docs`_ for more details.
804+
805+
..note::
806+
807+
You either need elevated privileges for the ``journalctl`` command, or add
808+
your user to the systemd-journal group:
809+
810+
..code-block::terminal
811+
812+
$ sudo usermod -a -G systemd-journal <your-username>
813+
711814
Stateless Worker
712815
~~~~~~~~~~~~~~~~
713816

@@ -2100,6 +2203,8 @@ middleware and *only* include your own:
21002203
If a middleware service is abstract, a different instance of the service will
21012204
be created per bus.
21022205

2206+
.. _middleware-doctrine:
2207+
21032208
Middleware for Doctrine
21042209
~~~~~~~~~~~~~~~~~~~~~~~
21052210

@@ -2283,6 +2388,7 @@ Learn more
22832388
.. _`streams`:https://redis.io/topics/streams-intro
22842389
.. _`Supervisor docs`:http://supervisord.org/
22852390
.. _`PCNTL`:https://www.php.net/manual/book.pcntl.php
2391+
.. _`systemd docs`:https://www.freedesktop.org/wiki/Software/systemd/
22862392
.. _`SymfonyCasts' message serializer tutorial`:https://symfonycasts.com/screencast/messenger/transport-serializer
22872393
.. _`Long polling`:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html
22882394
.. _`Visibility Timeout`:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

‎service_container.rst‎

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,21 @@ What other services are available? Find out by running:
5656
5757
# this is just a *small* sample of the output...
5858
59-
Describes a logger instance.
60-
Psr\Log\LoggerInterface (monolog.logger)
59+
Autowirable Types
60+
=================
6161
62-
Request stack that controls the lifecycle of requests.
63-
Symfony\Component\HttpFoundation\RequestStack (request_stack)
62+
The following classes & interfaces can be used as type-hints when autowiring:
6463
65-
RouterInterface is the interface that all Router classes must implement.
66-
Symfony\Component\Routing\RouterInterface (router.default)
64+
Describes a logger instance.
65+
Psr\Log\LoggerInterface (logger)
6766
68-
[...]
67+
Request stack that controls the lifecycle of requests.
68+
Symfony\Component\HttpFoundation\RequestStack (request_stack)
69+
70+
RouterInterface is the interface that all Router classes must implement.
71+
Symfony\Component\Routing\RouterInterface (router.default)
72+
73+
[...]
6974
7075
When you use these type-hints in your controller methods or inside your
7176
:ref:`own services<service-container-creating-service>`, Symfony will automatically

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp