You should probably consider the process design more than the technology (for now).<p>Goals:<p>1. Whenever receiving a request for processing, you should return a task identifier that can be used to check for progress (ex. you could simply store this in redis as 'TaskId', 'Url', 'FileId', 'Type', 'Status', 'OutputId' - with Type being the type of input: URL or FileId)<p>2. Once the client received the TaskId, it can do a request to get the status, which would could be 'Pending' or 'Complete' with an URL to the output.<p>Process:<p>===================<p>Request Processing:<p>-------------------<p>1. Receive the request with parameters (can users upload files or simply pass through an URL?)<p>2. Create a token based on the hash of the input file and the parameters supplied (ex. MD5 hash of the video, from time, end time of the video to capture).<p>3. Check if a task identifier has already been assigned to the token, if it has, return it. This means the client will then do a request to check for the status and would receive { 'Status': 'Complete', 'URL': '...' } and can immediately access the output via the URL.<p>4. If the video is uploaded, check whether it has been saved via hashing the file (ex. MD5), if it has then use the existing FileId, otherwise, save the file and generate a new FileId.<p>5. Generate a new task identifier and create a task entry to store in redis that contains metadata about the task.<p>6. Create a command containing the task identifier and publish it to the message queue for processing (which is asynchronous).<p>7. Return the task identifier to the client.<p>Task Processing:<p>-------------------<p>To process the video, you would simply grab the metadata from redis and update the progress as you go along. If the task identifier doesn't exist (no metadata entry on redis), simply abort the task processing.<p>Although this is pretty simple, you should focus on optimizing file storage (ea. don't store the same file twice and reference them by MD5 hash or the like and perhaps have a cleanup routine to remove rarely/once-off used files) and processing time (if the task has already been processed, simply return the output). You should also decide on limitations to prevent abuse (DOS/DDOS attacks, large file uploads, what the service can be used for etc.) and limit your liability.<p>Is this the answer you were looking for or are you asking about the specifics of implementation (technology wise)?