Async-Microservice
view release on metacpan or search on metacpan
# 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 )