| .. _overview: |
| |
| ############ |
| API Overview |
| ############ |
| |
| ========================= |
| An overview of the model |
| ========================= |
| |
| Messages are transferred between connected peers over 'links'. At the |
| sending peer the link is called a sender. At the receiving peer it is |
| called a receiver. Messages are sent by senders and received by |
| receivers. Links may have named 'source' and 'target' addresses (for |
| example to identify the queue from which message were to be received |
| or to which they were to be sent). |
| |
| Links are established over sessions. Sessions are established over |
| connections. Connections are (generally) established between two |
| uniquely identified containers. Though a connection can have multiple |
| sessions, often this is not needed. The container API allows you to |
| ignore sessions unless you actually require them. |
| |
| The sending of a message over a link is called a delivery. The message |
| is the content sent, including all meta-data such as headers and |
| annotations. The delivery is the protocol exchange associated with the |
| transfer of that content. |
| |
| To indicate that a delivery is complete, either the sender or the |
| receiver 'settles' it. When the other side learns that it has been |
| settled, they will no longer communicate about that delivery. The |
| receiver can also indicate whether they accept or reject the |
| message. |
| |
| Three different delivery levels or 'guarantees' can be achieved: |
| at-most-once, at-least-once or exactly-once. See |
| :ref:`delivery-guarantees` for more detail. |
| |
| ======================================================= |
| A summary of the most commonly used classes and members |
| ======================================================= |
| |
| A brief summary of some of the key classes follows. |
| |
| The :py:class:`~proton.reactor.Container` class is a convenient entry |
| point into the API, allowing connections and links to be |
| established. Applications are structured as one or more event |
| handlers. Handlers can be set at Container, Connection, or Link |
| scope. Messages are sent by establishing an appropriate sender and |
| invoking its :py:meth:`~proton.Sender.send()` method. This is |
| typically done when the sender is sendable, a condition indicated by |
| the :py:meth:`~proton.handlers.MessagingHandler.on_sendable()` event, to |
| avoid excessive build up of messages. Messages can be received by |
| establishing an appropriate receiver and handling the |
| :py:meth:`~proton.handlers.MessagingHandler.on_message()` event. |
| |
| .. autoclass:: proton.reactor.Container |
| :show-inheritance: proton.reactor.Reactor |
| :members: connect, create_receiver, create_sender, run, schedule |
| :undoc-members: |
| :noindex: |
| |
| .. py:attribute:: container_id |
| |
| The identifier used to identify this container in any |
| connections it establishes. Container names should be |
| unique. By default a UUID will be used. |
| |
| The :py:meth:`~proton.reactor.Container.connect()` method returns |
| an instance of :py:class:`~proton.Connection`, the |
| :py:meth:`~proton.reactor.Container.create_receiver()` method |
| returns an instance of :py:class:`~proton.Receiver` and the |
| :py:meth:`~proton.reactor.Container.create_sender()` method |
| returns an instance of :py:class:`~proton.Sender`. |
| |
| .. autoclass:: proton.Connection |
| :members: open, close, state, session, hostname, container, |
| remote_container, remote_desired_capabilities, remote_hostname, remote_offered_capabilities , remote_properties |
| :undoc-members: |
| :noindex: |
| |
| .. autoclass:: proton.Receiver |
| :show-inheritance: proton.Link |
| :members: flow, recv, drain, draining |
| :undoc-members: |
| :noindex: |
| |
| .. autoclass:: proton.Sender |
| :show-inheritance: proton.Link |
| :members: offered, send |
| :undoc-members: |
| :noindex: |
| |
| .. autoclass:: proton.Link |
| :members: name, state, is_sender, is_receiver, |
| credit, queued, session, connection, |
| source, target, remote_source, remote_target |
| :undoc-members: |
| :noindex: |
| |
| The :py:meth:`~proton.Link.source()`, |
| :py:meth:`~proton.Link.target()`, |
| :py:meth:`~proton.Link.remote_source()` and |
| :py:meth:`~proton.Link.remote_target()` methods all return an |
| instance of :py:class:`~proton.Terminus`. |
| |
| |
| .. autoclass:: proton.Delivery |
| :members: update, settle, settled, remote_state, local_state, partial, readable, writable, |
| link, session, connection |
| :undoc-members: |
| :noindex: |
| |
| .. autoclass:: proton.handlers.MessagingHandler |
| :members: on_start, on_reactor_init, |
| on_message, |
| on_accepted, |
| on_rejected, |
| on_settled, |
| on_sendable, |
| on_connection_error, |
| on_link_error, |
| on_session_error, |
| on_disconnected, |
| accept, reject, release, settle |
| :undoc-members: |
| :noindex: |
| |
| .. autoclass:: proton.Event |
| :members: delivery, link, receiver, sender, session, connection, reactor, context |
| :undoc-members: |
| :noindex: |
| |
| .. autoclass:: proton.Message |
| :members: address, id, priority, subject, ttl, reply_to, correlation_id, durable, user_id, |
| content_type, content_encoding, creation_time, expiry_time, delivery_count, first_acquirer, |
| group_id, group_sequence, reply_to_group_id, |
| send, recv, encode, decode |
| :undoc-members: |
| :noindex: |
| |
| .. autoclass:: proton.Terminus |
| :members: address, dynamic, properties, capabilities, filter |
| :undoc-members: |
| :noindex: |
| |
| .. _delivery-guarantees: |
| |
| =================== |
| Delivery guarantees |
| =================== |
| |
| For at-most-once, the sender settles the message as soon as it sends |
| it. If the connection is lost before the message is received by the |
| receiver, the message will not be delivered. |
| |
| For at-least-once, the receiver accepts and settles the message on |
| receipt. If the connection is lost before the sender is informed of |
| the settlement, then the delivery is considered in-doubt and should be |
| retried. This will ensure it eventually gets delivered (provided of |
| course the connection and link can be reestablished). It may mean that |
| it is delivered multiple times though. |
| |
| Finally, for exactly-once, the receiver accepts the message but |
| doesn't settle it. The sender settles once it is aware that the |
| receiver accepted it. In this way the receiver retains knowledge of an |
| accepted message until it is sure the sender knows it has been |
| accepted. If the connection is lost before settlement, the receiver |
| informs the sender of all the unsettled deliveries it knows about, and |
| from this the sender can deduce which need to be redelivered. The |
| sender likewise informs the receiver which deliveries it knows about, |
| from which the receiver can deduce which have already been settled. |