
Zitat von
Spooky
Korrekt, ja.
In deiner aktuellen Konfiguration nutzt du MAILER_DSN gar nicht, insofern ist diese Umgebungsvariable für dich momentan auch irrelevant.
Wenn du rate limiting brauchst wird es etwas komplizierter. Siehe dazu auch die Diskussion hier auf Github:
https://github.com/contao/contao/issues/7495
Hallo Spooky,
nochmals vielen Dank – langsam wird das klarer, alleine mit der aktuellen Doku habe ich das nicht hinbekommen. Das Dilemma mit dem rate limiting auf dem contao_prio_high Worker kann ich nachvollziehen, allerdings ist es in Umgebungen, die ein restriktives rate limit benötigen ja zumindest m.M.n. diskutabel zweitrangig, welche Prio die Nachricht hat – Hauptsache das Limit wird nicht überschritten.
Wenn ich das alles richtig verstanden habe, kann ich mit der folgenden beispielhaften config.yml
- den gesamten Mailverkehr auf den einen neuen "mailer"-Transport umleiten, und
- dem "mailer"-Transport ein rate limit von 20 Nachrichten alle 15 Minuten zuordnen?
Code:
# config/config.yaml
framework:
rate_limiter:
mailer:
policy: fixed_window
limit: 20
interval: 15 minutes
messenger:
transports:
mailer:
dsn: doctrine://default?table_name=tl_message_queue&queue_name=mailer&auto_setup=false
rate_limiter: mailer
routing:
'Symfony\Component\Mailer\Messenger\SendEmailMessage': mailer
mailer:
transports:
email: '%env(MAILER_DSN)%'
contao:
localconfig:
disableCron: true
mailer:
transports:
email: ~
email:
from: Test <test@domain.de>
messenger:
workers:
-
transports:
- contao_prio_high
options:
- '--time-limit=60'
- '--sleep=5'
autoscale:
desired_size: 5
max: 10
enabled: true
-
transports:
- contao_prio_normal
options:
- '--time-limit=60'
- '--sleep=10'
autoscale:
desired_size: 10
max: 10
enabled: true
-
transports:
- contao_prio_low
options:
- '--time-limit=60'
- '--sleep=20'
autoscale:
desired_size: 20
max: 10
enabled: true
-
transports:
- mailer
options:
- '--time-limit=60'
- '--sleep=20'
autoscale:
desired_size: 5
max: 10
enabled: true
Noch nicht ganz sicher bin ich mir, ob das eingestellte Limit so tatsächlich greift, und ob der minütliche echte Cronjob auf "contao:cron" das jetzt auch so steuert... Aber das teste ich jetzt mal noch in Ruhe. Zusatzfrage, auch falls das ggf. nochmal jemand braucht: kann ich entsprechend mit der folgenden config.yml das rate limit für den contao_prio_high Worker aktivieren, ohne den zusätzlichen "mailer"-Transport anzulegen?
Code:
# config/config.yaml
framework:
rate_limiter:
mailer:
policy: fixed_window
limit: 20
interval: 15 minutes
messenger:
transports:
contao_prio_high:
dsn: doctrine://default?table_name=tl_message_queue&queue_name=prio_high&auto_setup=false
rate_limiter: mailer
routing:
'Symfony\Component\Mailer\Messenger\SendEmailMessage': contao_prio_high
mailer:
transports:
email: '%env(MAILER_DSN)%'
contao:
localconfig:
disableCron: true
mailer:
transports:
email: ~
email:
from: Test <test@domain.de>
messenger:
workers:
-
transports:
- contao_prio_high
options:
- '--time-limit=60'
- '--sleep=5'
autoscale:
desired_size: 5
max: 10
enabled: true
-
transports:
- contao_prio_normal
options:
- '--time-limit=60'
- '--sleep=10'
autoscale:
desired_size: 10
max: 10
enabled: true
-
transports:
- contao_prio_low
options:
- '--time-limit=60'
- '--sleep=20'
autoscale:
desired_size: 20
max: 10
enabled: true
Vielen Dank im Voraus –
Liebe Grüße,
Heiner
Edit:
Nach ausführlicheren Tests glaube ich jetzt zu wissen, dass der contao_prio_high Worker die Nachrichten sofort und m.E. ohne auf einen Cronjob zu lauschen umgehend versendet, und auch nicht auf ein rate limit hört. Ich denke, mit der folgenden Lösung habe ich mein Ziel soweit erreicht. Ein neuer Transport, der allen Mailverkehr übernimmt und per rate_limiter eingebremst wird:
Code:
# config/config.yaml
framework:
rate_limiter:
limited_mailer:
policy: fixed_window
limit: 20
interval: 15 minutes
messenger:
transports:
limited_mailer:
dsn: doctrine://default?table_name=tl_message_queue&queue_name=limited_mailer&auto_setup=false
rate_limiter: limited_mailer
routing:
'Symfony\Component\Mailer\Messenger\SendEmailMessage': limited_mailer
mailer:
transports:
email: '%env(MAILER_DSN)%'
contao:
localconfig:
disableCron: true
messenger:
workers:
-
transports:
- limited_mailer
options:
- '--time-limit=60'
- '--sleep=20'
autoscale:
desired_size: 5
max: 10
enabled: true
mailer:
transports:
email: ~
email:
from: Test <test@domain.de>
Vielen Dank nochmals für den entscheidenden Tipp, @Spooky!