{"id":28462337,"url":"https://github.com/akhawaja/redisrqs-java","last_synced_at":"2026-04-29T01:01:48.523Z","repository":{"id":57716812,"uuid":"77304824","full_name":"akhawaja/redisrqs-java","owner":"akhawaja","description":"Java library using Redis as a message queue.","archived":false,"fork":false,"pushed_at":"2017-10-16T02:23:27.000Z","size":22,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-03T16:34:11.729Z","etag":null,"topics":["message-queue","queueing","redis"],"latest_commit_sha":null,"homepage":null,"language":"Java","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/akhawaja.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":"2016-12-25T00:28:04.000Z","updated_at":"2017-11-15T11:27:56.000Z","dependencies_parsed_at":"2022-09-26T21:40:18.289Z","dependency_job_id":null,"html_url":"https://github.com/akhawaja/redisrqs-java","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/akhawaja/redisrqs-java","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhawaja%2Fredisrqs-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhawaja%2Fredisrqs-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhawaja%2Fredisrqs-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhawaja%2Fredisrqs-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akhawaja","download_url":"https://codeload.github.com/akhawaja/redisrqs-java/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akhawaja%2Fredisrqs-java/sbom","scorecard":{"id":175840,"data":{"date":"2025-08-11","repo":{"name":"github.com/akhawaja/redisrqs-java","commit":"57ffb3c2f118e600724063855c46453153f70929"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-4jrv-ppp4-jm57"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T17:40:11.659Z","repository_id":57716812,"created_at":"2025-08-16T17:40:11.659Z","updated_at":"2025-08-16T17:40:11.659Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32405903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-28T19:38:08.556Z","status":"ssl_error","status_checked_at":"2026-04-28T19:37:55.688Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["message-queue","queueing","redis"],"created_at":"2025-06-07T04:09:04.936Z","updated_at":"2026-04-29T01:01:48.486Z","avatar_url":"https://github.com/akhawaja.png","language":"Java","readme":"Redis RQS (Reliable Queueing System) - Java Version\n===================================================\n\n# Introduction\nA Java library designed to build a very fast queuing system that guarantees **at least once and at most once delivery**. To achieve this objective, RedisRQS uses Redis as the data store and supports a 1:1 Publisher to Subscriber relationship. When a message arrives, RedisRQS guarantees that only one Subscriber will ever receive a message for processing regardless of the number of Subscribers listening for the same topic in the queue. This should allow a system to scale out the number of processors based on work load.\n\nThe way this system handles queuing and dequeuing messages is via Lua scripts. This provides an additional guarantee that each method call to RedisRQS will be a single network call to Redis. Furthermore, RedisRQS also guarantees that messages will never be lost due to a Subscriber unable to finish processing or crashing while processing a message. The queue sweeper will periodically put messages back in to the queue for processing when it runs. You can change the frequency of the sweep in the options.\n\nIt is important to note that at this time, there is no support for poison messages. If a message is incomplete or will always crash a Subscriber, the message (poison) will be put back in the pending queue for processing by another Subscriber. This is on the roadmap and will be made available at a future date. As all things open source, your contributions are welcome.\n\nWhen using this library, three lists will be created:\n\n- Pending: named `redisrqs:pending`\n- Working: named `redisrqs:working`\n- Values: named `redisrqs:values`\n\nNote: There is a [NodeJS version](https://github.com/akhawaja/redisrqs) of this library as well.\n\n# Installation via Maven\n\nAdd the library as a dependency in your pom.xml file:\n\n``` xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.amirkhawaja\u003c/groupId\u003e\n  \u003cartifactId\u003eredisrqs-java\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n# Quick start\nAt this time, this library is not made available in Maven Central. You can build this locally by issuing the command:\n\n``` bash\n$\u003e make package\n```\n\nAlternatively, you can use the following Maven command:\n\n``` bash\n$\u003e mvn clean compile package\n```\n\nEither of these two steps will create a `jar` file you can include in your project. \n\nThe following is an example of how you can use this library:\n\n``` java\nprivate final static String CONNECTION_URI = \"redis://localhost:6379/1\";\n\nprivate static void main(String[] args) {\n    final HashMap\u003cString, String\u003e options = new HashMap\u003c\u003e();\n    options.put(\"sweepInterval\", \"60000\"); // Sweep the queue every 1-minute\n    \n    final com.amirkhawaja.RedisQueue queue = new com.amirkhawaja.RedisQueue(CONNECTION_URI, options);\n    final String data = \"This is a test\";\n    final String topic = \"Test Topic\";\n\n    // Queue the message\n    queue.enqueue(topic, data);\n    \n    // Dequeue the message\n    final com.amirkhawaja.models.Message message = queue.dequeue();\n    \n    // Do some work...then remove the message from the queue\n    queue.release(message.getUuid());\n     \n    // Dispose the queue when you are done\n    queue.close();\n}\n```\n\n# Internal Redis Lists\n## Pending\nWhen a message is queued it is put in this list. This list will only contain\nthe UUID of the message. The actual message value lives in the Values list.\n\n## Working\nThis is where the currently processed message(s) will be stored.\n\n## Values\nThis is where the actual message will live. Each message is identified\nby a UUID. When a message is de-queued, only the UUID is moved from the\nPending list to the Working list.\n\n# History\n- 1.0.2: Published to Maven Central.\n- 1.0.0: Initial public release.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakhawaja%2Fredisrqs-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakhawaja%2Fredisrqs-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakhawaja%2Fredisrqs-java/lists"}