Andrew Miklas: > Hi, > > I'm using Postfix with the pipe transport to deliver mail to an > internal application. The transport map is set to forward all > messages destined to *@*.pagerduty.com to the application. > > This usually works really well, but we occasionally have fairness > problems where a sudden burst of messages received nearly > simultaneously for one address monopolize our pool of delivery > agents. This creates high delivery latencies for messages to other > addresses that arrive just after the burst. It looks like Postfix > maintains a single delivery queue for all messages due for processing > by our application. > > What I'd like to do is have Postfix maintain separate delivery queues > for each address, and then cycle round-robin through those queues as > delivery agents become available.
/etc/postfix/main.cf: pipetransportname_destination_recipient_limit = 2 where pipetransportname is the first field in master.cf. Wietse > In other words, if I get burst of 100 emails to > "a...@acme.pagerduty.com", and then 5 seconds later (before we've been > able to process all of those messages), we receive a single message to > "b...@foobar.pagerduty.com", I'd like that single message to b@ to be > assigned to the first available transport agent, even though a pure > FIFO delivery strategy would have it processed only after we've > finished with all 100 a@ messages. > > Is this possible? We've sort of been faking it so far by adjusting > the transport_destination_concurrency_limit and the max number of > transport processes, but it would be better if we could set the > queueing to work per-address rather than for the whole transport. > > Here's some relevant bits from my Postfix config: > > (From the transport map) > /^.*@.*\.pagerduty\.com$/ pagerduty: > > (From main.cf) > pagerduty_destination_recipient_limit = 1 > pagerduty_destination_concurrency_limit = 1 > > (From master.cf) > pagerduty unix - n n - 2 pipe > user=www-data:www-data argv=/opt/ruby-enterprise/bin/ruby /u/apps/ > pagerduty/current/lib/parse_email.rb $recipient > > > Thanks, > > > Andrew >