@@ -69,6 +69,7 @@ def __init__(
69
69
self ._auth_uri = "{}/{}" .format (self ._auth_uri , self ._entity_name )
70
70
# Internal flag for switching whether to apply connection sharing, pending fix in uamqp library
71
71
self ._connection_sharing = False
72
+ self ._handlers = []
72
73
73
74
def __enter__ (self ):
74
75
if self ._connection_sharing :
@@ -89,10 +90,15 @@ def _create_uamqp_connection(self):
89
90
def close (self ):
90
91
# type: () -> None
91
92
"""
92
- Close down the ServiceBus client and the underlying connection.
93
+ Close down the ServiceBus client.
94
+ All spawned senders, receivers and underlying connection will be shutdown.
93
95
94
96
:return: None
95
97
"""
98
+ for handler in self ._handlers :
99
+ handler .close ()
100
+ self ._handlers .clear ()
101
+
96
102
if self ._connection_sharing and self ._connection :
97
103
self ._connection .destroy ()
98
104
@@ -157,7 +163,7 @@ def get_queue_sender(self, queue_name, **kwargs):
157
163
158
164
"""
159
165
# pylint: disable=protected-access
160
- return ServiceBusSender (
166
+ handler = ServiceBusSender (
161
167
fully_qualified_namespace = self .fully_qualified_namespace ,
162
168
queue_name = queue_name ,
163
169
credential = self ._credential ,
@@ -168,6 +174,8 @@ def get_queue_sender(self, queue_name, **kwargs):
168
174
user_agent = self ._config .user_agent ,
169
175
** kwargs
170
176
)
177
+ self ._handlers .append (handler )
178
+ return handler
171
179
172
180
def get_queue_receiver (self , queue_name , ** kwargs ):
173
181
# type: (str, Any) -> ServiceBusReceiver
@@ -205,7 +213,7 @@ def get_queue_receiver(self, queue_name, **kwargs):
205
213
206
214
"""
207
215
# pylint: disable=protected-access
208
- return ServiceBusReceiver (
216
+ handler = ServiceBusReceiver (
209
217
fully_qualified_namespace = self .fully_qualified_namespace ,
210
218
queue_name = queue_name ,
211
219
credential = self ._credential ,
@@ -216,6 +224,8 @@ def get_queue_receiver(self, queue_name, **kwargs):
216
224
user_agent = self ._config .user_agent ,
217
225
** kwargs
218
226
)
227
+ self ._handlers .append (handler )
228
+ return handler
219
229
220
230
def get_queue_deadletter_receiver (self , queue_name , ** kwargs ):
221
231
# type: (str, Any) -> ServiceBusReceiver
@@ -265,7 +275,7 @@ def get_queue_deadletter_receiver(self, queue_name, **kwargs):
265
275
queue_name = queue_name ,
266
276
transfer_deadletter = kwargs .get ('transfer_deadletter' , False )
267
277
)
268
- return ServiceBusReceiver (
278
+ handler = ServiceBusReceiver (
269
279
fully_qualified_namespace = self .fully_qualified_namespace ,
270
280
entity_name = entity_name ,
271
281
credential = self ._credential ,
@@ -277,6 +287,8 @@ def get_queue_deadletter_receiver(self, queue_name, **kwargs):
277
287
user_agent = self ._config .user_agent ,
278
288
** kwargs
279
289
)
290
+ self ._handlers .append (handler )
291
+ return handler
280
292
281
293
def get_topic_sender (self , topic_name , ** kwargs ):
282
294
# type: (str, Any) -> ServiceBusSender
@@ -300,7 +312,7 @@ def get_topic_sender(self, topic_name, **kwargs):
300
312
:caption: Create a new instance of the ServiceBusSender from ServiceBusClient.
301
313
302
314
"""
303
- return ServiceBusSender (
315
+ handler = ServiceBusSender (
304
316
fully_qualified_namespace = self .fully_qualified_namespace ,
305
317
topic_name = topic_name ,
306
318
credential = self ._credential ,
@@ -311,6 +323,8 @@ def get_topic_sender(self, topic_name, **kwargs):
311
323
user_agent = self ._config .user_agent ,
312
324
** kwargs
313
325
)
326
+ self ._handlers .append (handler )
327
+ return handler
314
328
315
329
def get_subscription_receiver (self , topic_name , subscription_name , ** kwargs ):
316
330
# type: (str, str, Any) -> ServiceBusReceiver
@@ -353,7 +367,7 @@ def get_subscription_receiver(self, topic_name, subscription_name, **kwargs):
353
367
354
368
"""
355
369
# pylint: disable=protected-access
356
- return ServiceBusReceiver (
370
+ handler = ServiceBusReceiver (
357
371
fully_qualified_namespace = self .fully_qualified_namespace ,
358
372
topic_name = topic_name ,
359
373
subscription_name = subscription_name ,
@@ -365,6 +379,8 @@ def get_subscription_receiver(self, topic_name, subscription_name, **kwargs):
365
379
user_agent = self ._config .user_agent ,
366
380
** kwargs
367
381
)
382
+ self ._handlers .append (handler )
383
+ return handler
368
384
369
385
def get_subscription_deadletter_receiver (self , topic_name , subscription_name , ** kwargs ):
370
386
# type: (str, str, Any) -> ServiceBusReceiver
@@ -416,7 +432,7 @@ def get_subscription_deadletter_receiver(self, topic_name, subscription_name, **
416
432
subscription_name = subscription_name ,
417
433
transfer_deadletter = kwargs .get ('transfer_deadletter' , False )
418
434
)
419
- return ServiceBusReceiver (
435
+ handler = ServiceBusReceiver (
420
436
fully_qualified_namespace = self .fully_qualified_namespace ,
421
437
entity_name = entity_name ,
422
438
credential = self ._credential ,
@@ -428,6 +444,8 @@ def get_subscription_deadletter_receiver(self, topic_name, subscription_name, **
428
444
user_agent = self ._config .user_agent ,
429
445
** kwargs
430
446
)
447
+ self ._handlers .append (handler )
448
+ return handler
431
449
432
450
def get_subscription_session_receiver (self , topic_name , subscription_name , session_id = None , ** kwargs ):
433
451
# type: (str, str, str, Any) -> ServiceBusReceiver
@@ -473,7 +491,7 @@ def get_subscription_session_receiver(self, topic_name, subscription_name, sessi
473
491
474
492
"""
475
493
# pylint: disable=protected-access
476
- return ServiceBusSessionReceiver (
494
+ handler = ServiceBusSessionReceiver (
477
495
fully_qualified_namespace = self .fully_qualified_namespace ,
478
496
topic_name = topic_name ,
479
497
subscription_name = subscription_name ,
@@ -486,6 +504,8 @@ def get_subscription_session_receiver(self, topic_name, subscription_name, sessi
486
504
user_agent = self ._config .user_agent ,
487
505
** kwargs
488
506
)
507
+ self ._handlers .append (handler )
508
+ return handler
489
509
490
510
def get_queue_session_receiver (self , queue_name , session_id = None , ** kwargs ):
491
511
# type: (str, str, Any) -> ServiceBusSessionReceiver
@@ -526,7 +546,7 @@ def get_queue_session_receiver(self, queue_name, session_id=None, **kwargs):
526
546
527
547
"""
528
548
# pylint: disable=protected-access
529
- return ServiceBusSessionReceiver (
549
+ handler = ServiceBusSessionReceiver (
530
550
fully_qualified_namespace = self .fully_qualified_namespace ,
531
551
queue_name = queue_name ,
532
552
credential = self ._credential ,
@@ -538,3 +558,5 @@ def get_queue_session_receiver(self, queue_name, session_id=None, **kwargs):
538
558
user_agent = self ._config .user_agent ,
539
559
** kwargs
540
560
)
561
+ self ._handlers .append (handler )
562
+ return handler
0 commit comments