@@ -181,6 +181,7 @@ def __init__(self, namespace,
181181 type = 'direct' , connection = None , clock = None ,
182182 accept = None , serializer = None , producer_pool = None ,
183183 queue_ttl = None , queue_expires = None ,
184+ queue_durable = False , queue_exclusive = False ,
184185 reply_queue_ttl = None , reply_queue_expires = 10.0 ):
185186 self .namespace = namespace
186187 self .connection = connection
@@ -193,9 +194,16 @@ def __init__(self, namespace,
193194 self .serializer = self .serializer if serializer is None else serializer
194195 self .queue_ttl = queue_ttl
195196 self .queue_expires = queue_expires
197+ self .queue_durable = queue_durable
198+ self .queue_exclusive = queue_exclusive
196199 self .reply_queue_ttl = reply_queue_ttl
197200 self .reply_queue_expires = reply_queue_expires
198201 self ._producer_pool = producer_pool
202+ if queue_exclusive and queue_durable :
203+ raise ValueError (
204+ "queue_exclusive and queue_durable cannot both be True "
205+ "(exclusive queues are automatically deleted and cannot be durable)." ,
206+ )
199207
200208 def __call__ (self , connection ):
201209 bound = copy (self )
@@ -236,8 +244,9 @@ def get_reply_queue(self):
236244 f'{ oid } .{ self .reply_exchange .name } ' ,
237245 exchange = self .reply_exchange ,
238246 routing_key = oid ,
239- durable = False ,
240- auto_delete = True ,
247+ durable = self .queue_durable ,
248+ exclusive = self .queue_exclusive ,
249+ auto_delete = not self .queue_durable ,
241250 expires = self .reply_queue_expires ,
242251 message_ttl = self .reply_queue_ttl ,
243252 )
@@ -250,8 +259,9 @@ def get_queue(self, hostname):
250259 return Queue (
251260 f'{ hostname } .{ self .namespace } .pidbox' ,
252261 exchange = self .exchange ,
253- durable = False ,
254- auto_delete = True ,
262+ durable = self .queue_durable ,
263+ exclusive = self .queue_exclusive ,
264+ auto_delete = not self .queue_durable ,
255265 expires = self .queue_expires ,
256266 message_ttl = self .queue_ttl ,
257267 )
0 commit comments