Skip to main content

Various strategies for sending requests

Project description

aio-request

This library simplifies an interaction between microservices:

  1. Allows sending requests using various strategies
  2. Propagates a deadline and a priority of requests
  3. Exposes client/server metrics

Example:

import aiohttp
import aio_request

async with aiohttp.ClientSession() as client_session:
    client = aio_request.setup(
        transport=aio_request.AioHttpTransport(client_session),
        endpoint="http://endpoint:8080/",
    )
    response_ctx = client.request(
        aio_request.get("thing"),
        deadline=aio_request.Deadline.from_timeout(5)
    )
    async with response_ctx as response:
        pass  # process response here

Request strategies

The following strategies are supported:

  1. Single attempt. Only one attempt is sent.
  2. Sequential. Attempts are sent sequentially with delays between them.
  3. Parallel. Attempts are sent in parallel one by one with delays between them.

Attempts count and delays are configurable.

Example:

import aiohttp
import aio_request

async with aiohttp.ClientSession() as client_session:
    client = aio_request.setup(
        transport=aio_request.AioHttpTransport(client_session),
        endpoint="http://endpoint:8080/",
    )
    response_ctx = client.request(
        aio_request.get("thing"),
        deadline=aio_request.Deadline.from_timeout(5),
        strategy=aio_request.parallel_strategy(
            attempts_count=3,
            delays_provider=aio_request.linear_delays(min_delay_seconds=0.1, delay_multiplier=0.1)
        )
    )
    async with response_ctx as response:
        pass  # process response here

Deadline & priority propagation

To enable it for the server side a middleware should be configured:

import aiohttp.web
import aio_request

app = aiohttp.web.Application(middlewares=[aio_request.aiohttp_middleware_factory()])

Expose client/server metrics

To enable client metrics a metrics provider should be passed to the transport:

import aiohttp
import aio_request

async with aiohttp.ClientSession() as client_session:
    client = aio_request.setup(
        transport=aio_request.AioHttpTransport(
            client_session,
            metrics_provider=aio_request.PROMETHEUS_METRICS_PROVIDER
        ),
        endpoint="http://endpoint:8080/",
    )

It is an example of how it should be done for aiohttp and prometheus.

To enable client metrics a metrics provider should be passed to the middleware:

import aiohttp.web
import aio_request

app = aiohttp.web.Application(
    middlewares=[
        aio_request.aiohttp_middleware_factory(
            metrics_provider=aio_request.PROMETHEUS_METRICS_PROVIDER
        )
    ]
)

Circuit breaker

import aiohttp
import aio_request

async with aiohttp.ClientSession() as client_session:
    client = aio_request.setup_v2(
        transport=aio_request.AioHttpTransport(client_session),
        endpoint="http://endpoint:8080/",
        circuit_breaker=aio_request.DefaultCircuitBreaker[str, int](
            break_duration=1.0,
            sampling_duration=1.0,
            minimum_throughput=2,
            failure_threshold=0.5,
        ),
    )

In the case of requests count >= minimum throughput(>=2) in sampling period(1 second) the circuit breaker will open if failed requests count/total requests count >= failure threshold(50%).

v0.1.26 (2022-11-02)

v0.1.25 (2022-08-25)

v0.1.24 (2022-07-04)

v0.1.23 (2022-02-08)

v0.1.22 (2022-01-08)

v0.1.21 (2022-01-05)

  • Content type should be None in Response.json()

v0.1.20 (2022-01-05)

v0.1.19 (2021-11-01)

v0.1.18 (2021-09-08)

v0.1.17 (2021-09-01)

v0.1.16 (2021-09-01)

v0.1.15 (2021-09-01)

v0.1.14 (2021-08-18)

v0.1.13 (2021-08-15)

v0.1.12 (2021-07-21)

v0.1.11 (2021-07-21)

  • Fix Request.update_headers, add Request.extend_headers #59

v0.1.10 (2021-07-20)

  • Add Response.is_json property to check whether content-type is json compatible #58
  • Tracing support #54,
  • Configuration of a new pipeline

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aio-request-0.1.26.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

aio_request-0.1.26-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file aio-request-0.1.26.tar.gz.

File metadata

  • Download URL: aio-request-0.1.26.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.0

File hashes

Hashes for aio-request-0.1.26.tar.gz
Algorithm Hash digest
SHA256 56a5c3badd1d33939fd8700a33d8db015d7f9976e809231afc4b573a0f9868ce
MD5 7db7dfe2f9e0f793f9feba536d804822
BLAKE2b-256 691440da37e7ff5bff2826df063bbd0e7bac0d59e99c6e34e6c2b0f29dcf8405

See more details on using hashes here.

Provenance

File details

Details for the file aio_request-0.1.26-py3-none-any.whl.

File metadata

File hashes

Hashes for aio_request-0.1.26-py3-none-any.whl
Algorithm Hash digest
SHA256 c94cefbd0f841afe225468a26365c9f621ab7e2a93217e019ec92601061330ae
MD5 f22282d0b04f2b688334d0533158566e
BLAKE2b-256 8e498a017c1b8c238046475717580e6bec917b9fbb0fda53316d0be00ee4a0a8

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page