|
12 | 12 | ConsumerTestException, |
13 | 13 | MyMessageHandlerAccept, |
14 | 14 | MyMessageHandlerDiscard, |
| 15 | + MyMessageHandlerDiscardWithAnnotations, |
15 | 16 | MyMessageHandlerNoack, |
16 | 17 | MyMessageHandlerRequeue, |
17 | 18 | MyMessageHandlerRequeueWithAnnotations, |
@@ -156,7 +157,7 @@ def test_consumer_async_queue_with_discard(connection: Connection) -> None: |
156 | 157 | ) |
157 | 158 | ) |
158 | 159 | management.declare_queue(QuorumQueueSpecification(name=queue_dead_lettering)) |
159 | | - management.bind( |
| 160 | + bind_path = management.bind( |
160 | 161 | BindingSpecification( |
161 | 162 | source_exchange=exchange_dead_lettering, |
162 | 163 | destination_queue=queue_dead_lettering, |
@@ -203,6 +204,95 @@ def test_consumer_async_queue_with_discard(connection: Connection) -> None: |
203 | 204 |
|
204 | 205 | message_count_dead_lettering = management.purge_queue(queue_dead_lettering) |
205 | 206 |
|
| 207 | + management.unbind(bind_path) |
| 208 | + management.delete_exchange(exchange_dead_lettering) |
| 209 | + management.delete_queue(queue_dead_lettering) |
| 210 | + |
| 211 | + management.close() |
| 212 | + |
| 213 | + assert message_count == 0 |
| 214 | + # check dead letter queue |
| 215 | + assert message_count_dead_lettering == messages_to_send |
| 216 | + |
| 217 | + |
| 218 | +def test_consumer_async_queue_with_discard_with_annotations( |
| 219 | + connection: Connection, |
| 220 | +) -> None: |
| 221 | + messages_to_send = 1000 |
| 222 | + |
| 223 | + exchange_dead_lettering = "exchange-dead-letter" |
| 224 | + queue_dead_lettering = "queue-dead-letter" |
| 225 | + queue_name = "test-queue_async_discard" |
| 226 | + binding_key = "key_dead_letter" |
| 227 | + |
| 228 | + management = connection.management() |
| 229 | + |
| 230 | + # configuring dead lettering |
| 231 | + management.declare_exchange( |
| 232 | + ExchangeSpecification( |
| 233 | + name=exchange_dead_lettering, |
| 234 | + exchange_type=ExchangeType.fanout, |
| 235 | + arguments={}, |
| 236 | + ) |
| 237 | + ) |
| 238 | + management.declare_queue(QuorumQueueSpecification(name=queue_dead_lettering)) |
| 239 | + bind_path = management.bind( |
| 240 | + BindingSpecification( |
| 241 | + source_exchange=exchange_dead_lettering, |
| 242 | + destination_queue=queue_dead_lettering, |
| 243 | + binding_key=binding_key, |
| 244 | + ) |
| 245 | + ) |
| 246 | + |
| 247 | + management.declare_queue( |
| 248 | + QuorumQueueSpecification( |
| 249 | + name=queue_name, |
| 250 | + dead_letter_exchange=exchange_dead_lettering, |
| 251 | + dead_letter_routing_key=binding_key, |
| 252 | + ) |
| 253 | + ) |
| 254 | + |
| 255 | + addr_queue = queue_address(queue_name) |
| 256 | + addr_queue_dl = queue_address(queue_dead_lettering) |
| 257 | + |
| 258 | + publisher = connection.publisher("/queues/" + queue_name) |
| 259 | + |
| 260 | + # publish messages_to_send messages |
| 261 | + for i in range(messages_to_send): |
| 262 | + publisher.publish(Message(body="test" + str(i))) |
| 263 | + publisher.close() |
| 264 | + |
| 265 | + # workaround: it looks like when the consumer finish to consume invalidate the connection |
| 266 | + # so for the moment we need to use one dedicated |
| 267 | + connection_consumer = create_connection() |
| 268 | + |
| 269 | + consumer = connection_consumer.consumer( |
| 270 | + addr_queue, handler=MyMessageHandlerDiscardWithAnnotations() |
| 271 | + ) |
| 272 | + |
| 273 | + try: |
| 274 | + consumer.run() |
| 275 | + # ack to terminate the consumer |
| 276 | + except ConsumerTestException: |
| 277 | + pass |
| 278 | + |
| 279 | + consumer.close() |
| 280 | + |
| 281 | + # check for added annotation |
| 282 | + new_consumer = connection.consumer(addr_queue_dl) |
| 283 | + message = new_consumer.consume() |
| 284 | + new_consumer.close() |
| 285 | + |
| 286 | + assert "x-opt-string" in message.annotations |
| 287 | + |
| 288 | + message_count = management.purge_queue(queue_name) |
| 289 | + |
| 290 | + management.delete_queue(queue_name) |
| 291 | + |
| 292 | + message_count_dead_lettering = management.purge_queue(queue_dead_lettering) |
| 293 | + |
| 294 | + management.unbind(bind_path) |
| 295 | + management.delete_exchange(exchange_dead_lettering) |
206 | 296 | management.delete_queue(queue_dead_lettering) |
207 | 297 |
|
208 | 298 | management.close() |
|
0 commit comments