{"action":"created","issue":{"url":"https://api.github.com/repos/cognoma/task-service/issues/4","repository_url":"https://api.github.com/repos/cognoma/task-service","labels_url":"https://api.github.com/repos/cognoma/task-service/issues/4/labels{/name}","comments_url":"https://api.github.com/repos/cognoma/task-service/issues/4/comments","events_url":"https://api.github.com/repos/cognoma/task-service/issues/4/events","html_url":"https://github.com/cognoma/task-service/issues/4","id":165462055,"number":4,"title":"Choose Queue","user":{"login":"awm33","id":3846080,"avatar_url":"https://avatars.githubusercontent.com/u/3846080?v=3","gravatar_id":"","url":"https://api.github.com/users/awm33","html_url":"https://github.com/awm33","followers_url":"https://api.github.com/users/awm33/followers","following_url":"https://api.github.com/users/awm33/following{/other_user}","gists_url":"https://api.github.com/users/awm33/gists{/gist_id}","starred_url":"https://api.github.com/users/awm33/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/awm33/subscriptions","organizations_url":"https://api.github.com/users/awm33/orgs","repos_url":"https://api.github.com/users/awm33/repos","events_url":"https://api.github.com/users/awm33/events{/privacy}","received_events_url":"https://api.github.com/users/awm33/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2016-07-14T02:22:23Z","updated_at":"2016-07-14T11:12:17Z","closed_at":null,"body":"I'd like to nail down what queue will be used initially. An abstraction layer will be used to make it so other \"queue backends\" can implemented.\r\n\r\nThe following pseudocode functions must be able to be implemented on top of the queue:\r\n\r\n- createQueue(queueName)\r\n- destroyQueue(queueName)\r\n- getMessage(queueName, numberOfMessages)\r\n    - Returns result with receive handle if message ID can't be used for touch and release.\r\n    - numberOfMessages  - optional requirement - Could potentially just call this function multiple times.\r\n- putMessage(queueName, task)\r\n    - Returns message ID\r\n- deleteMessage(queueName, task)\r\n   - Sometimes this is also called acknowledgement. Basically, the task is completed or failed.\r\n- touchMessage(queueName, task, newTimeout)\r\n  - Uses the message id or receipt handle to update the timeout on the message.\r\n- releaseMessage(queueName, task)\r\n  - Releases the message back to the queue for retrieving by another worker. Usually this is implemented by calling touchMessage with a timeout of 0.\r\n\r\nThese are the functions the abstraction class would implement.\r\n\r\nI've developed task queues against SQS and Google Pub/Sub. I have the most experience with SQS. For the local development environment, there are solutions for running something that mimics the APIs for SQS and Google Pub/Sub. There are also production ready open source solutions compatible with the SQS API.\r\n\r\nI would recommend a cloud service such as SQS or Google Pub/Sub over a self hosted solution. One less thing to manage.\r\n\r\nRedis is another contender and possibly RabbitMQ, though I would need to test that."},"comment":{"url":"https://api.github.com/repos/cognoma/task-service/issues/comments/232635931","html_url":"https://github.com/cognoma/task-service/issues/4#issuecomment-232635931","issue_url":"https://api.github.com/repos/cognoma/task-service/issues/4","id":232635931,"user":{"login":"cgreene","id":542643,"avatar_url":"https://avatars.githubusercontent.com/u/542643?v=3","gravatar_id":"","url":"https://api.github.com/users/cgreene","html_url":"https://github.com/cgreene","followers_url":"https://api.github.com/users/cgreene/followers","following_url":"https://api.github.com/users/cgreene/following{/other_user}","gists_url":"https://api.github.com/users/cgreene/gists{/gist_id}","starred_url":"https://api.github.com/users/cgreene/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgreene/subscriptions","organizations_url":"https://api.github.com/users/cgreene/orgs","repos_url":"https://api.github.com/users/cgreene/repos","events_url":"https://api.github.com/users/cgreene/events{/privacy}","received_events_url":"https://api.github.com/users/cgreene/received_events","type":"User","site_admin":false},"created_at":"2016-07-14T11:12:17Z","updated_at":"2016-07-14T11:12:17Z","body":"I am supportive of a solution that you prefer as long as it is portable between cloud vendors. Happy to use one that is provided by the vendor (e.g. SQS on AWS) as long as we could also run that queue at a production level in a container on another vendor.\r\n\r\nAt the moment I would plan to start out on Google. They have been supportive of hackathons in the past and are a bit easier to coordinate with than other providers for support. It sounds like pub/sub would be ideal, as long as we can have relatively loose coupling to it. Thanks!"}}
{"actor":{"display_login":"cgreene"}}