{"id":19779383,"url":"https://github.com/ranjanrak/dead-letter-queue","last_synced_at":"2025-07-25T05:18:03.246Z","repository":{"id":39592752,"uuid":"457804357","full_name":"ranjanrak/dead-letter-queue","owner":"ranjanrak","description":"A tiny go package to manage HTTP requests with dead letter management/retry. Based on go-redis.","archived":false,"fork":false,"pushed_at":"2022-07-08T07:02:27.000Z","size":39,"stargazers_count":18,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-11T18:46:16.991Z","etag":null,"topics":["dead-letter-queue","http","queue","redis"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ranjanrak.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-10T14:04:10.000Z","updated_at":"2024-12-17T15:32:45.000Z","dependencies_parsed_at":"2022-07-04T11:22:00.809Z","dependency_job_id":null,"html_url":"https://github.com/ranjanrak/dead-letter-queue","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/ranjanrak/dead-letter-queue","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjanrak%2Fdead-letter-queue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjanrak%2Fdead-letter-queue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjanrak%2Fdead-letter-queue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjanrak%2Fdead-letter-queue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ranjanrak","download_url":"https://codeload.github.com/ranjanrak/dead-letter-queue/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjanrak%2Fdead-letter-queue/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266960756,"owners_count":24012763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dead-letter-queue","http","queue","redis"],"created_at":"2024-11-12T05:34:33.647Z","updated_at":"2025-07-25T05:18:03.210Z","avatar_url":"https://github.com/ranjanrak.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dead-letter-queue\n\n[![Run Tests](https://github.com/ranjanrak/dead-letter-queue/actions/workflows/go-test.yml/badge.svg)](https://github.com/ranjanrak/dead-letter-queue/actions/workflows/go-test.yml)\n[![Go Reference](https://pkg.go.dev/badge/github.com/ranjanrak/dead-letter-queue.svg)](https://pkg.go.dev/github.com/ranjanrak/dead-letter-queue)\n\nA tiny go package to manage HTTP requests with dead letter management/retry. Based on go-redis.\n\n## Installation\n\n```\ngo get -u github.com/ranjanrak/dead-letter-queue\n```\n\n- [Usage](#usage)\n- [Request](#request)\n  - [Adding message](#adding-message)\n  - [Delete message from the request queue](#delete-message-from-the-request-queue)\n  - [Delete message from the dead letter queue](#delete-message-from-the-dead-letter-queue)\n  - [Clear request queue](#clear-request-queue)\n  - [Clear deadletter queue](#clear-deadletter-queue)\n- [Execute queue](#executerun-message-queue)\n  - [Execute request queue](#execute-request-queue)\n  - [Execute deadletter queue](#execute-deadletter-queue)\n- [Fetch message response status](#fetch-message-response-status)\n- [Sample response](#sample-response)\n\n## Usage\n\n```go\npackage main\n\nimport (\n    \"log\"\n    \"net/http\"\n    \"net/url\"\n\n    deadletterqueue \"github.com/ranjanrak/dead-letter-queue\"\n)\nfunc main() {\n    // Create new HTTP request queue instance\n    httpQueue := deadletterqueue.New(deadletterqueue.ClientParam{\n\t\tRedisAddr: \"\",\n\t\tRedisPasw: \"\",\n\t\tCtx:       nil,\n\t\tQueueName: \"\",\n\t\tDeadHTTP:  []int{400, 403, 429, 500, 502},\n    })\n\n    // Add post params\n    postParam := url.Values{}\n    postParam.Add(\"exchange\", \"NSE\")\n    postParam.Add(\"tradingsymbol\", \"TCS\")\n    postParam.Add(\"transaction_type\", \"BUY\")\n    postParam.Add(\"quantity\", \"1\")\n    postParam.Add(\"product\", \"CNC\")\n    postParam.Add(\"order_type\", \"MARKET\")\n    postParam.Add(\"validity\", \"DAY\")\n\n    // Add request header\n    var headers http.Header = map[string][]string{}\n    headers.Add(\"x-kite-version\", \"3\")\n    headers.Add(\"authorization\", \"token api_key:access_token\")\n    headers.Add(\"content-type\", \"application/x-www-form-urlencoded\")\n\n    // Request message\n    reqMsgOrd := deadletterqueue.InputMsg{\n        Name:      \"Place TCS Order\",\n        Url:       \"https://api.kite.trade/orders/regular\",\n        ReqMethod: \"POST\",\n        PostParam: postParam,\n        Headers:   headers,\n    }\n\n    // worker that adds message to redis queue\n    err := httpQueue.AddMessage(reqMsgOrd)\n    if err != nil {\n        log.Fatalf(\"Error adding msg in the request queue : %v\", err)\n    }\n\n    // worker that executes http request queues\n    httpQueue.ExecuteQueue()\n\n    // worker that executes dead letter http queues\n    httpQueue.ExecuteDeadQueue()\n}\n```\n\n## Request\n\nRequest represents an HTTP request with all parameters.\n\n### Adding message\n\nAdding an HTTP message to the request queue with all parameters.\n\n```go\n// Add request header\nvar headers http.Header = map[string][]string{}\nheaders.Add(\"x-kite-version\", \"3\")\nheaders.Add(\"authorization\", \"token api_key:access_token\")\n\n// Request message\nqueueMsg := deadletterqueue.InputMsg{\n    Name:      \"Fetch order book\",\n    Url:       \"https://api.kite.trade/orders\",\n    ReqMethod: \"GET\",\n    PostParam: nil,\n    Headers:   headers,\n}\nerr := httpQueue.AddMessage(queueMsg)\nif err != nil {\n    log.Fatalf(\"Error adding msg in the request queue : %v\", err)\n}\n```\n\n### Delete message from the request queue\n\nDelete request message available in the queue before it's execution with the input message `Name`.\n\n```go\nerr := httpQueue.DeleteReqMsg(\"Place TCS Order\")\nif err != nil {\n    log.Fatalf(\"Error removing msg from the request msg queue : %v\", err)\n}\n```\n\n### Delete message from the dead letter queue\n\nDelete message by the input message `Name` from the Deadletter queue.\n\n```go\nerr := httpQueue.DeleteDeadMsg(\"Place TCS Order\")\nif err != nil {\n    log.Fatalf(\"Error removing msg from the deadletter queue : %v\", err)\n}\n```\n\n### Clear request queue\n\nClear complete request message queue.\n\n```go\nerr := httpQueue.ClearReqQueue()\nif err != nil {\n    log.Fatalf(\"Error clearing the request queue : %v\", err)\n}\n```\n\n### Clear deadletter queue\n\nClear complete deadletter message queue.\n\n```go\nerr := httpQueue.ClearDeadQueue()\nif err != nil {\n    log.Fatalf(\"Error clearing the deadletter queue : %v\", err)\n}\n```\n\n## Execute/run message queue\n\nExecute request queue or dead letter queue(i.e failed HTTP request).\n\n### Execute request queue\n\nExecute HTTP requests in the request queue\n\n```go\nhttpQueue.ExecuteQueue()\n```\n\n### Execute deadletter queue\n\nExecute failed HTTP request message i.e dead letter queue.\n\n```go\nhttpQueue.ExecuteDeadQueue()\n```\n\n## Fetch message response status\n\nFetch response body of an given message name, post it's execution.\n\n```go\nstatus, err := httpQueue.MessageStatus(\"Place TCS Order\")\nif err != nil {\n    log.Fatalf(\"Error %v\", err)\n}\nlog.Printf(\"Response status %v: \", status)\n\n```\n\nSample responses\n\n```\nResponse status : {\"status\":\"success\",\"data\":{\"order_id\":\"220627001805439\"}}\n\nResponse status : {\"status\":\"error\",\n\"message\":\"Your order price is lower than the current [lower circuit limit]\",\n\"data\":null,\"error_type\":\"InputException\"}\n\n```\n\n## Sample response\n\n`httpQueue.GetQueue(\"ReqQueue\")`: Lists all the available messages in the http queue\n\n```\n\n[{\"Name\":\"Place TCS Order\",\"Url\":\"https://api.kite.trade/orders/regular\",\n\"ReqMethod\":\"POST\",\"PostParam\":{\"exchange\":\"NSE\",\"order_type\":\"MARKET\",\n\"product\":\"CNC\",\"quantity\":1,\"tradingsymbol\":\"TCS\",\"transaction_type\":\"BUY\",\n\"validity\":\"DAY\"},\"Headers\":{\"authorization\":\"token abcd123:efgh1234\",\n\"content-type\":\"application/x-www-form-urlencoded\",\"x-kite-version\":3}},\n{\"Name\":\"Post session token\",\"Url\":\"https://api.kite.trade/session/token\",\n\"ReqMethod\":\"POST\",\"PostParam\":{\"api_key\":\"api_key\",\"checksum\":\"checksum\",\n\"request_token\":\"request_token\"},\"Headers\":{\"x-kite-version\":3}},\n..]\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Franjanrak%2Fdead-letter-queue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Franjanrak%2Fdead-letter-queue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Franjanrak%2Fdead-letter-queue/lists"}