Async-Microservice

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

        # can be started using:
        plackup --port 8085 -Ilib --access-log /dev/null --server Twiggy bin/async-microservice-time.psgi
    
        curl "http://localhost:8085/v1/hcheck" -H "accept: application/json"
        curl "http://localhost:8085/v1/epoch"  -H "accept: application/json"
        curl "http://localhost:8085/v1/datetime?time_zone=local" -H "accept: application/json"

DESCRIPTION

    This is an example asynchronous HTTP microservice using
    Async::Microservice. View the source code; it's minimal.

METHODS

 service_name

    Just a name, used to identify process and look for OpenAPI
    documentation.

 get_routes

    Path::Router configuration for dispatching

 http response methods

  GET_datetime

    https://time.meon.eu/v1/datetime

  POST_datetime

        $ curl -X POST "https://time.meon.eu/v1/datetime" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{\"epoch\":-42}"
        {
           "date" : "1969-12-31",
           "datetime" : "1969-12-31 23:59:18 +0000",
           "day" : "31",
           "epoch" : -42,
           "hour" : "23",
           "minute" : "59",
           "month" : "12",
           "second" : "18",
           "time" : "23:59:18",
           "time_zone" : "+0000",
           "time_zone_name" : "UTC",
           "year" : "1969"
        }

  GET_epoch

    https://time.meon.eu/v1/epoch

  GET_sleep

    https://time.meon.eu/v1/sleep?duration=2.5

    This is the only response method processed in parallel (the other ones
    are pure CPU-bound) that sleeps for a given (or random) number of
    seconds and only then returns the request response with when it started
    and how long it took. Normally this is the same as what is in the
    duration parameter, but in case the server is overloaded with requests,
    the event loop may call the timer handler much later than the duration.
    Try:

        ab -n 1000 -c 500 http://localhost:8085/v1/sleep?duration=3
        Connection Times (ms)
                      min  mean[+/-sd] median   max
        Connect:        0  259 432.8     21    1033
        Processing:  3001 3090  72.5   3061    3253
        Waiting:     3001 3090  72.5   3061    3253
        Total:       3022 3349 394.1   3155    4065

    Then try to run together with 100% CPU load:

        ab -q -n 10000 -c 50 http://localhost:8085/v1/datetime

  the rest

    Check out Async::Microservice for built-in http response methods.

SEE ALSO

    t/02_Async-Microservice-Time.t for an example how to test this service.



( run in 0.627 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )