doozer icon indicating copy to clipboard operation
doozer copied to clipboard

Restful API task execution using echo and machinery in golang

doozer

Restful API task execution using echo and machinery (https://github.com/RichardKnop/machinery) in Go!

This is a POC that will hopefully expand into something more useful. The goal is to create a restful api that can trigger defined tasks to execute and given to workers. The execution will return a result or issue a task ID if the executing takes longer than 5 seconds. You can then use the task_id to query the status and retrieve the results from the client.

POC will be based off echo framework and the machinery framework. It is a learning experience for me switching from python to Go. It is based off the examples from machinery, using send/task/worker for inspiration.

I am using gb (https://getgb.io/) for a build tool and atom (https://atom.io/) Go extensions for an editor.

Features

  • Simple REST API to execute some basic tasks. Using the examples (Add and Multiply from machinery)
  • A Simple Client that executes the REST API Calls.
  • Simple Authentication and issuing a JWT to a client.
  • Query on task completion/status on task ID.
  • Workers to execute tasks and return results (Add and Multiply)
  • Server and workers use a broker back end (Using Redis) for queueing (Part of machinery library)

Code Status

  • Finished 100%

Client Help

$ ./client help
Simple client to interact with Dozer API service.

Usage:
  client
  client [command]

Available Commands:
  add         Add api call.
  help        Help about any command
  lookup      Lookup a task uuid.
  mul         Multiply api call.
  token       Print a JWT token.
  version     Print the version.

Use "client [command] --help" for more information about a command.

Client adding

$ ./client add --i 1,2,3,4,5,6
Result: 21

Client adding when workers down

$ ./client add --i 1,2,3
Defered! task_1db8fd1f-aff0-4db6-9c9a-ada3d20cb006

$ ./client lookup --uuid=task_1db8fd1f-aff0-4db6-9c9a-ada3d20cb006
Status : PENDING

When Workers come back online...

./client lookup --uuid=task_1db8fd1f-aff0-4db6-9c9a-ada3d20cb006
Status : SUCCESS
Result : 6