Ce contenu n'est pas disponible dans la langue sélectionnée.
Chapter 9. Message delivery
9.1. Sending messages
To send a message, override the on_sendable
event handler and call the Sender.send()
method. The sendable
event fires when the Sender
has enough credit to send at least one message.
Example: Sending messages
class ExampleHandler(MessagingHandler): def on_start(self, event): conn = event.container.connect("amqp://example.com") sender = event.container.create_sender(conn, "jobs") def on_sendable(self, event): message = Message("job-content") event.sender.send(message)
For more information, see the send.py example.
9.2. Tracking sent messages
When a message is sent, the sender can keep a reference to the delivery
object representing the transfer. After the message is delivered, the receiver accepts or rejects it. The sender is notified of the outcome for each delivery.
To monitor the outcome of a sent message, override the on_accepted
and on_rejected
event handlers and map the delivery state update to the delivery returned from send()
.
Example: Tracking sent messages
def on_sendable(self, event): message = Message(self.message_body) delivery = event.sender.send(message) def on_accepted(self, event): print("Delivery", event.delivery, "is accepted") def on_rejected(self, event): print("Delivery", event.delivery, "is rejected")
9.3. Receiving messages
To receive a message, create a receiver and override the on_message
event handler.
Example: Receiving messages
class ExampleHandler(MessagingHandler): def on_start(self, event): conn = event.container.connect("amqp://example.com") receiver = event.container.create_receiver(conn, "jobs") def on_message(self, event): print("Received message", event.message, "from", event.receiver)
For more information, see the receive.py example.
9.4. Acknowledging received messages
To explicitly accept or reject a delivery, use the Delivery.update()
method with the ACCEPTED
or REJECTED
state in the on_message
event handler.
Example: Acknowledging received messages
def on_message(self, event): try: process_message(event.message) event.delivery.update(ACCEPTED) except: event.delivery.update(REJECTED)
By default, if you do not explicity acknowledge a delivery, then the library accepts it after on_message
returns. To disable this behavior, set the auto_accept
receiver option to false.