{"id":13467555,"url":"https://github.com/rabbitmq/internals","last_synced_at":"2025-05-14T20:04:57.823Z","repository":{"id":37819459,"uuid":"47681271","full_name":"rabbitmq/internals","owner":"rabbitmq","description":"High level architecture overview","archived":false,"fork":false,"pushed_at":"2025-02-03T11:24:30.000Z","size":129,"stargazers_count":1452,"open_issues_count":1,"forks_count":75,"subscribers_count":77,"default_branch":"master","last_synced_at":"2025-04-02T15:00:32.007Z","etag":null,"topics":["architecture","documentation","internals","rabbitmq"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rabbitmq.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-12-09T09:23:53.000Z","updated_at":"2025-04-02T02:39:43.000Z","dependencies_parsed_at":"2025-04-02T15:00:19.132Z","dependency_job_id":"76bf1291-c879-4bda-971a-78d4cd0dba0d","html_url":"https://github.com/rabbitmq/internals","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbitmq%2Finternals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbitmq%2Finternals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbitmq%2Finternals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rabbitmq%2Finternals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rabbitmq","download_url":"https://codeload.github.com/rabbitmq/internals/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248065302,"owners_count":21041871,"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","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":["architecture","documentation","internals","rabbitmq"],"created_at":"2024-07-31T15:00:57.858Z","updated_at":"2025-04-09T16:00:25.777Z","avatar_url":"https://github.com/rabbitmq.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"# RabbitMQ Internals #\n\nThis project aims to explain how RabbitMQ works internally. The goal\nis to make it easier to contribute for newcomers to the project, and\nat the same time have a common repository of knowledge to be shared\nacross the project contributors.\n\n## Purpose ##\n\nMost interesting modules in RabbitMQ projects have documentation\nessays, sometimes quite extensive, at the top. The aim here is not to\nduplicate what's there, but to provide the highest-level overview as\nto the overall architecture.\n\n## Guides ##\n\nIn order to understand how RabbitMQ's internals work, it's better to\ntry to follow the logic of how a message progresses through\nRabbitMQ as it is handled by the broker, otherwise, you would end up\nnavigating through many guides without a clear context of what's going\non, or without knowing what to read next. Therefore we have prepared\nthe following guides to help you understand how RabbitMQ works:\n\n### Basic Publish Guide ###\n\nHere we follow the life of a message since it's received from the\nnetwork until it has been routed by the exchanges. We take a look at\nthe various processing steps that happen to a message right until it\nis delivered to one or perhaps many queues.\n\n[Basic Publish](./basic_publish.md)\n\n### Deliver To Queues Guide ###\n\nAfter the message has been routed, the broker needs to deliver that\nmessage to the respective queues. Here not only the message has to be\nsent to queues, but also mandatory messages and publisher confirms\nneed to be taken into account. Also, the queue needs to try to deliver\nthe message to prospective consumer, otherwise the message ends up\nqueued.\n\n[Deliver To Queues](./deliver_to_queues.md)\n\n### Queues and Message Store\n\nProvides an overview of the Erlang processes that back queues\nand how they interact with the message store, message index and so on.\n\n[Queues and Message Store](./queues_and_message_store.md)\n\n### Variable Queue Guide ###\n\nUltimately, messages end up queued at the\n[backing queue](https://github.com/rabbitmq/rabbitmq-server/blob/master/deps/rabbit/src/rabbit_backing_queue.erl). From\nhere they can be retrieved, acked, purged, and so on. The most common\nimplementation of the backing queue behaviour is the\n`rabbit_variable_queue`\n[module](https://github.com/rabbitmq/rabbitmq-server/blob/master/deps/rabbit/src/rabbit_variable_queue.erl),\nexplained in the following guide:\n\n[Variable Queue](./variable_queue.md)\n\n### Mandatory Messages and Publisher Confirm Guides ###\n\nAs explained on the [Deliver To Queues](./deliver_to_queues.md) guide,\na channel has to handle messages published as mandatory and also take\ncare of publisher confirms. These processes are explained in the\nfollowing guides:\n\n- [Mandatory Message Handling](./mandatory_message_handling.md)\n- [Publisher Confirms](./publisher_confirms.md)\n\n### Authentication and Authorization ###\n\nAs explained in the [Basic Publish](./basic_publish.md), there are\nsome rules to see if a message can be accepted by the broker from a\ncertain publisher. This is explained in the following guide:\n\n[Authorization and Authentication Backends](./authorization_and_authentication.md)\n\n### Internal Event Subsystem\n\nIn some cases components in a running node communicate via events.\nSome events are consumed by other nodes.\n\n[Internal Events](./internal_events.md)\n\n### Management Plugin ###\n\nAn architectural overview of the v3.6.7+ version of the management plugin.\n\n[Metrics and Management Plugin](./metrics_and_management_plugin.md)\n\n## Maturity and Completeness\n\nThese guides are not complete, haven't been edited, and are work in\nprogress in general.\n\nSo if you find yourself wanting more detail, check the code first!\n\n## License\n\n(c) Pivotal Software Inc, 2015-2016\n\nReleased under the\n[Creative Commons Attribution-ShareAlike 3.0 Unported](https://creativecommons.org/licenses/by-sa/3.0/)\nlicense.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frabbitmq%2Finternals","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frabbitmq%2Finternals","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frabbitmq%2Finternals/lists"}