{"id":25821116,"url":"https://github.com/afiore/rmqfwd","last_synced_at":"2026-05-14T21:05:16.294Z","repository":{"id":57661152,"uuid":"149485439","full_name":"afiore/rmqfwd","owner":"afiore","description":"A tool to persist, export and republish RabbitMQ messages","archived":false,"fork":false,"pushed_at":"2020-01-24T18:08:28.000Z","size":150,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-26T17:24:38.321Z","etag":null,"topics":["elasticsearch","messaging","rabbitmq-management","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/afiore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-19T17:11:20.000Z","updated_at":"2020-01-24T18:08:33.000Z","dependencies_parsed_at":"2022-09-07T01:20:53.855Z","dependency_job_id":null,"html_url":"https://github.com/afiore/rmqfwd","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/afiore/rmqfwd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afiore%2Frmqfwd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afiore%2Frmqfwd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afiore%2Frmqfwd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afiore%2Frmqfwd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/afiore","download_url":"https://codeload.github.com/afiore/rmqfwd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afiore%2Frmqfwd/sbom","scorecard":{"id":169790,"data":{"date":"2025-08-11","repo":{"name":"github.com/afiore/rmqfwd","commit":"c7008709e0fdce48901bbf3c99283401c59a13bd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.1,"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":"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":"Code-Review","score":0,"reason":"Found 0/26 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":"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":"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":"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":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"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":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.3.2 not signed: https://api.github.com/repos/afiore/rmqfwd/releases/17137168","Warn: release artifact v0.3.1 not signed: https://api.github.com/repos/afiore/rmqfwd/releases/16980733","Warn: release artifact v0.3.0 not signed: https://api.github.com/repos/afiore/rmqfwd/releases/15435811","Warn: release artifact v0.2.0 not signed: https://api.github.com/repos/afiore/rmqfwd/releases/15297827","Warn: release artifact v0.3.2 does not have provenance: https://api.github.com/repos/afiore/rmqfwd/releases/17137168","Warn: release artifact v0.3.1 does not have provenance: https://api.github.com/repos/afiore/rmqfwd/releases/16980733","Warn: release artifact v0.3.0 does not have provenance: https://api.github.com/repos/afiore/rmqfwd/releases/15435811","Warn: release artifact v0.2.0 does not have provenance: https://api.github.com/repos/afiore/rmqfwd/releases/15297827"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ekidd/rust-musl-builder to ekidd/rust-musl-builder@sha256:f9dcff1c3ec683e2ccdd3c9c1771d12590b7c4d64505bac89aa8e552a038aeaf","Warn: containerImage not pinned by hash: docker/Dockerfile:1: pin your Docker image by updating alpine:3.7 to alpine:3.7@sha256:8421d9a84432575381bfabd248f1eb56f3aa21d9d7cd2511583c68c9b7511d10","Warn: containerImage not pinned by hash: k8s/rmq/Dockerfile:1: pin your Docker image by updating rabbitmq:3.6.12-alpine to rabbitmq:3.6.12-alpine@sha256:630265f275e5c4991f4262d7238f246ae8af88ee47db870ede60261e2b40d387","Info:   0 out of   3 containerImage dependencies pinned"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"31 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: RUSTSEC-2021-0139","Warn: Project is vulnerable to: RUSTSEC-2021-0145 / GHSA-g98v-hv3f-hcfr","Warn: Project is vulnerable to: RUSTSEC-2024-0375","Warn: Project is vulnerable to: RUSTSEC-2020-0159","Warn: Project is vulnerable to: RUSTSEC-2021-0093 / GHSA-pqqp-xmhj-wgcw","Warn: Project is vulnerable to: RUSTSEC-2022-0041 / GHSA-qc84-gqf4-9926","Warn: Project is vulnerable to: RUSTSEC-2020-0095","Warn: Project is vulnerable to: RUSTSEC-2019-0036 / RUSTSEC-2020-0036 / GHSA-jq66-xh47-j9f3 / GHSA-r98r-j25q-rmpr","Warn: Project is vulnerable to: RUSTSEC-2020-0146 / GHSA-3358-4f7f-p4j4","Warn: Project is vulnerable to: RUSTSEC-2023-0034 / GHSA-f8vr-r385-rh5r","Warn: Project is vulnerable to: RUSTSEC-2024-0003 / GHSA-8r5v-vm4m-4g25","Warn: Project is vulnerable to: RUSTSEC-2024-0332 / GHSA-q6cp-qfwq-4gcv","Warn: Project is vulnerable to: RUSTSEC-2019-0034 / GHSA-6rhx-hqxm-8p36","Warn: Project is vulnerable to: RUSTSEC-2019-0033 / GHSA-x7vr-c387-8w57","Warn: Project is vulnerable to: RUSTSEC-2020-0008 / GHSA-h3qr-rq2j-74w4","Warn: Project is vulnerable to: RUSTSEC-2021-0020 / GHSA-6hfq-h8hq-87mf","Warn: Project is vulnerable to: RUSTSEC-2021-0079 / GHSA-5h46-h7hh-c6x9","Warn: Project is vulnerable to: RUSTSEC-2021-0078 / GHSA-f3pg-qwvg-p99c","Warn: Project is vulnerable to: RUSTSEC-2022-0022 / GHSA-f67m-9j94-qv9j","Warn: Project is vulnerable to: RUSTSEC-2024-0421 / GHSA-h97m-ww89-6jmq","Warn: Project is vulnerable to: RUSTSEC-2019-0011 / GHSA-rh89-x75f-rh3c","Warn: Project is vulnerable to: RUSTSEC-2023-0045 / GHSA-wfg4-322g-9vqv","Warn: Project is vulnerable to: RUSTSEC-2020-0080","Warn: Project is vulnerable to: RUSTSEC-2020-0078 / GHSA-458v-4hrf-g3m4 / GHSA-c79c-gwph-gqfm","Warn: Project is vulnerable to: RUSTSEC-2020-0016","Warn: Project is vulnerable to: RUSTSEC-2022-0013 / GHSA-m5pq-gvj9-9vr8","Warn: Project is vulnerable to: RUSTSEC-2023-0018 / GHSA-mc8h-8q98-g5hr","Warn: Project is vulnerable to: RUSTSEC-2023-0081","Warn: Project is vulnerable to: RUSTSEC-2018-0017","Warn: Project is vulnerable to: RUSTSEC-2022-0006 / GHSA-9hpw-r23r-xgm5","Warn: Project is vulnerable to: RUSTSEC-2020-0071 / GHSA-wcg3-cvx6-7396"],"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-16T16:06:39.906Z","repository_id":57661152,"created_at":"2025-08-16T16:06:39.906Z","updated_at":"2025-08-16T16:06:39.906Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33043262,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"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":["elasticsearch","messaging","rabbitmq-management","rust"],"created_at":"2025-02-28T10:28:40.535Z","updated_at":"2026-05-14T21:05:16.276Z","avatar_url":"https://github.com/afiore.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rmqfwd\n\nRmqfwd listens to messages published in the `amq.rabbitmq.trace` exchange and persists them in a document store (i.e. Elasticsearch).\n\n\u003c!\u003e _WARNING_: this library is unmaintained \u003c!\u003e\n\nThis tool is designed with two main use cases in mind:\n\n- _Message auditing:_ by relying Rabbit's [Firehose tracer feature](https://www.rabbitmq.com/firehose.html), `rmqfwd` allows to inspect all the messages flowing in and out of the cluster, \nirrespectively of the specific app that publishes or consumes them, and its logging behaviour.\n\n- _Eventsourcing and replay:_ In event-based systems, _replaying_ messages constitutes an established pattern to perform a broad range of data operations (e.g. \nbackfilling a system, forcing it to recompute a given entity, addressing data inconsistencies introduced by occasional bugs or temporary outages).\nBy leveraging the search capability of ElasticSearch, `rmqfwd` allows to re-publish to an arbitrary exchange/routing-key\nin a single command, without having to write ad-hoc code.\n\n\n## Usage\n\n```\nUSAGE:\n    rmqfwd [SUBCOMMAND]\n\nFLAGS:\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n\nSUBCOMMANDS:\n    trace     Bind a queue to 'amq.rabbitmq.trace' and persists received messages into the message store\n    export    Query the message store and write the result to the file system\n    replay    Publish a subset of the messages in the data store\n    help      Prints this message or the help of the given subcommand(s)\n```\n\n### Configuration \n\nBy default, rmqfwd will try to read the `/etc/rmqfwd.toml` file (this might be overridden using the `-c` command line switch).\n\nA default configuration is reproduced below:\n\n```toml\n[rabbitmq]\nhost = \"localhost\"\nport = 5672\ntracing_exchange = \"amqp.rabbitmq.trace\"\n\n[rabbitmq.creds]\nuser = \"guest\"\npassword = \"guest\"\n\n[elasticsearch]\nindex = \"rabbit_messages\"\nmessage_type = \"message\"\nbase_url = \"http://localhost:9200\"\n```\n\n### Tracing messages\n\nThe `trace` subcommand binds a queue to the [Firehose tracer](https://www.rabbitmq.com/firehose.html) exchange `amq.rabbitmq.trace`.\nDequeued messages are written to ElasticSearch in a canonical format which captures key metadata such as \n(i.e. _published/delivered exchange_, _routing key_, _bound queues_, _headers_, etc), as well as the actual message body as plain text.\nThe format is deliberately flat and is intended to play well with [Kibana](https://www.elastic.co/products/kibana)'s built-in \nfilters. \n\n## Development setup\n\nOnce installed the Rust stable toolchain, you can build from source using:\n\n```\ncargo build\n```\n\nThe compiled executable will then be available at `./target/debug/rmqfwd`\n\n### Running and testing\n\nYou can setup a development enviornment by running `docker-compose up` in the project directory. This will initialise the following processes in two separate containers:\n\n- a Rabbitmq instance with [Firehose tracer](https://www.rabbitmq.com/firehose.html) enabled, managment console, and guest user access.\n- an Elasticsearch 2.5 instance\n\nA [smoketest](bin/smoketest.sh) is provided and is currently used in CI for regression testing\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafiore%2Frmqfwd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fafiore%2Frmqfwd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafiore%2Frmqfwd/lists"}