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
> 

Reply via email to