{"id":37021436,"url":"https://github.com/avides/spring-rabbit","last_synced_at":"2026-01-14T02:32:00.412Z","repository":{"id":43380761,"uuid":"162727401","full_name":"avides/spring-rabbit","owner":"avides","description":"Makes configuring RabbitMQ for Spring Boot applications more comfortable","archived":false,"fork":false,"pushed_at":"2024-11-07T18:04:34.000Z","size":130,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-20T17:46:17.625Z","etag":null,"topics":["rabbit","spring","spring-boot"],"latest_commit_sha":null,"homepage":"","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/avides.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":"2018-12-21T15:07:04.000Z","updated_at":"2025-05-06T08:44:27.000Z","dependencies_parsed_at":"2022-08-29T19:20:33.354Z","dependency_job_id":null,"html_url":"https://github.com/avides/spring-rabbit","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/avides/spring-rabbit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avides%2Fspring-rabbit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avides%2Fspring-rabbit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avides%2Fspring-rabbit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avides%2Fspring-rabbit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avides","download_url":"https://codeload.github.com/avides/spring-rabbit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avides%2Fspring-rabbit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"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":["rabbit","spring","spring-boot"],"created_at":"2026-01-14T02:31:59.667Z","updated_at":"2026-01-14T02:32:00.403Z","avatar_url":"https://github.com/avides.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring-Rabbit\n\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.avides.spring/spring-rabbit/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.avides.spring/spring-rabbit)\n[![Build](https://github.com/avides/spring-rabbit/workflows/release/badge.svg)](https://github.com/avides/spring-rabbit/actions)\n[![Nightly build](https://github.com/avides/spring-rabbit/workflows/nightly/badge.svg)](https://github.com/avides/spring-rabbit/actions)\n[![Coverage report](https://sonarcloud.io/api/project_badges/measure?project=avides_spring-rabbit\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=avides_spring-rabbit)\n[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=avides_spring-rabbit\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=avides_spring-rabbit)\n[![Technical dept](https://sonarcloud.io/api/project_badges/measure?project=avides_spring-rabbit\u0026metric=sqale_index)](https://sonarcloud.io/dashboard?id=avides_spring-rabbit)\n\n### Dependency\n``` xml\n\u003cdependency\u003e\n\t\u003cgroupId\u003ecom.avides.spring\u003c/groupId\u003e\n\t\u003cartifactId\u003espring-rabbit\u003c/artifactId\u003e\n\t\u003cversion\u003e2.7.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n## Table of Contents\n*  [Rabbit-Configuration](#rabbit-configuration)\n*  [Known issues](#known-issues)\n*  [Dependencies](#dependencies)\n*  [Metrics](#metrics)\n*  [MessagePostProcessors](#messagepostprocessors)\n*  [Example](#example)\n*  [DefaultProperties](#defaultproperties)\n*  [QueueProperties](#queueproperties)\n*  [RabbitTemplateProperties](#rabbittemplateproperties)\n*  [RabbitAdminProperties](#rabbitadminproperties)\n*  [MessageConverterProperties](#messageconverterproperties)\n*  [ExchangeProperties](#exchangeproperties)\n*  [ListenerProperties](#listenerproperties)\n*  [CustomConnectionFactoryProperties](#customconnectionfactoryproperties)\n*  [BeanReferenceConnectionFactoryProperties](#beanreferenceconnectionfactoryproperties)\n\n## Rabbit-Configuration\n\n``` ini\ndocker run \\\n-d \\\n--name rabbitmq \\\n--hostname rabbitmq \\\n--restart=always \\\n--memory=500MB \\\n-v PATH:/var/lib/rabbitmq \\\n-e RABBITMQ_NODENAME=rabbit@localhost \\\n-p 5672:5672 \\\n-p 15672:15672 \\\nrabbitmq:VERSION\n```\n\nThe `RABBITMQ_NODENAME` environment variable is necessary!\n\nThe rabbit user needs at least `MONITORING` as tag!\n\n## Known issues\n\nThe rabbit template needs to be autowired with `@Lazy`!\n\nIf one property needs to be overridden in other profiles the complete prefix/collection needs to be copied!\n\n## Dependencies\n\nThis project needs `micrometer-core` as dependency with a bean of `meterRegistry`.\n\n## Metrics\n\n`counter_rabbit_listener_event_count`\n\n`counter_rabbit_listener_event_total_duration_milliseconds_count`\n\n`rabbit_outbound_message_total` - Counter for each outbound grouped by the bean name of the rabbit template\n\n## MessagePostProcessors\n### appIdEnricherMessagePostProcessor\nMessagePostProcessor that adds the configured app-id as the appId-Header.\nPrefers the value of `spring.rabbitmq.outbound.global.before-publish-post-processor.appid-enricher.app-id` as app-id. If no property value exists, `info.artifactId` or else `UNKNOWN` is used.\nCould be disabled by setting `spring.rabbitmq.outbound.global.before-publish-post-processor.appid-enricher.enabled` to false.\n\n### counting-outbound\nMessagePostProcessor that adds metrics for each outbound message.\nEnabled if `spring.rabbitmq.outbound.global.before-publish-post-processor.counting-outbound.enabled` is true or not specified.\nUsing MeterRegistry will increment a counter with the bean name of the template as a tag for each message.\n\n## Configuration\n\n### Example\n\nExample for one connection factory\n\n``` ini\nspring.rabbitmq.addresses=localhost\nspring.rabbitmq.username=guest\nspring.rabbitmq.password=guest\n\nspring.rabbitmq.exchange.name=com.example.exchange\n\nspring.rabbitmq.queues[0].name=com.example.queue.zero\nspring.rabbitmq.queues[0].routing-keys[0]=routingkey.zero.zero\nspring.rabbitmq.queues[0].routing-keys[1]=routingkey.zero.one\nspring.rabbitmq.queues[0].routing-keys[2]=routingkey.zero.two.*\nspring.rabbitmq.queues[0].limit=500000\nspring.rabbitmq.queues[0].listener.bean-name=myListenerZero\n\nspring.rabbitmq.queues[1].name=com.example.queue.one\nspring.rabbitmq.queues[1].routing-key=routingkey.one\nspring.rabbitmq.queues[1].limit=100000\nspring.rabbitmq.queues[1].listener.bean-name=myListenerOne\n\nspring.rabbitmq.outbounds[0].bean-name=myRabbitTemplateZero\nspring.rabbitmq.outbounds[0].routing-key=another.routingkey.zero\n\nspring.rabbitmq.outbounds[1].bean-name=myRabbitTemplateOne\nspring.rabbitmq.outbounds[1].routing-key=another.routingkey.one.{placeholder}\n\nspring.rabbitmq.outbounds[2].bean-name=myRabbitTemplateTwo\nspring.rabbitmq.outbounds[2].routing-key=another.routingkey.two\nspring.rabbitmq.outbounds[2].exchange.name=com.example.another.exchange\n```\n\nExample for multiple connection factories\n\n``` ini\nspring.rabbitmq.connections[0].addresses=localhost\nspring.rabbitmq.connections[0].username=guest\nspring.rabbitmq.connections[0].password=guest\nspring.rabbitmq.connections[0].virtual-host=/\nspring.rabbitmq.connections[0].bean-name=myConnectionFactoryZero\n\nspring.rabbitmq.connections[1].addresses=localhost\nspring.rabbitmq.connections[1].username=guest\nspring.rabbitmq.connections[1].password=guest\nspring.rabbitmq.connections[1].virtual-host=/\nspring.rabbitmq.connections[1].bean-name=myConnectionFactoryOne\n\nspring.rabbitmq.message-converter.bean-name=myMessageConverter\nspring.rabbitmq.exchange.name=com.example.exchange\n\n#myConnectionFactoryZero\nspring.rabbitmq.queues[0].name=com.example.queue.zero\nspring.rabbitmq.queues[0].routing-key=routingkey.zero\nspring.rabbitmq.queues[0].exchange.name=com.example.exchange.zero\nspring.rabbitmq.queues[0].exchange.type=DIRECT\nspring.rabbitmq.queues[0].limit=500000\nspring.rabbitmq.queues[0].listener.bean-name=myListenerZero\nspring.rabbitmq.queues[0].listener.prefetch-count=55\nspring.rabbitmq.queues[0].listener.max-concurrent-consumers=2\nspring.rabbitmq.queues[0].rabbit-admin.bean-name=myRabbitAdminZero\nspring.rabbitmq.queues[0].rabbit-admin.connection-factory.bean-name=myConnectionFactoryZero\n\nspring.rabbitmq.outbounds[0].bean-name=myRabbitTemplateZero\nspring.rabbitmq.outbounds[0].routing-key=another.routingkey.zero\nspring.rabbitmq.outbounds[0].connection-factory.bean-name=myConnectionFactoryZero\nspring.rabbitmq.outbounds[0].exchange.name=com.example.exchange.zero\nspring.rabbitmq.outbounds[0].exchange.type=DIRECT\n\n#myConnectionFactoryOne\nspring.rabbitmq.queues[1].name=com.example.queue.one\nspring.rabbitmq.queues[1].routing-key=routingkey.one\nspring.rabbitmq.queues[1].limit=10000\nspring.rabbitmq.queues[1].listener.bean-name=myListenerOne\nspring.rabbitmq.queues[1].listener.message-converter.bean-name=myConverterOne\nspring.rabbitmq.queues[1].rabbit-admin.bean-name=myRabbitAdminOne\nspring.rabbitmq.queues[1].rabbit-admin.connection-factory.bean-name=myConnectionFactoryOne\n\nspring.rabbitmq.queues[2].name=com.example.queue.two\nspring.rabbitmq.queues[2].routing-keys[0]=routingkey.two.zero\nspring.rabbitmq.queues[2].routing-keys[1]=routingkey.two.one\nspring.rabbitmq.queues[2].limit=500000\nspring.rabbitmq.queues[2].listener.bean-name=myListenerTwo\nspring.rabbitmq.queues[2].rabbit-admin.bean-name=myRabbitAdminOne\nspring.rabbitmq.queues[2].rabbit-admin.connection-factory.bean-name=myConnectionFactoryOne\n\nspring.rabbitmq.outbounds[1].bean-name=myRabbitTemplateOne\nspring.rabbitmq.outbounds[1].routing-key=another.routingkey.one\nspring.rabbitmq.outbounds[1].connection-factory.bean-name=myConnectionFactoryOne\n```\n\nExample for an implementation of a SpringRabbitListener\n\n```java\n@Component\npublic class MyListener extends AbstractSpringRabbitListener\u003cMyData\u003e\n{\n    @Autowired\n    private MyService myService;\n\n    @Override\n    protected void handleEvent(MyData myData)\n    {\n        myDataService.doSomething(myData);\n    }\n}\n```\n## DefaultProperties\n\nThis properties are used to set default values. If there are specific properties (e.g `spring.rabbitmq.queues[0].exchange.(ExchangeProperties)`) the specefic properties are used.\n\n### spring.rabbitmq.exchange.(ExchangeProperties)\n\nSee [ExchangeProperties](#exchangeproperties)\n\n### spring.rabbitmq.message-converter.(MessageConverterProperties)\n\nSee [MessageConverterProperties](#messageconverterproperties)\n\n### spring.rabbitmq.prefetch-count\n\n@Min(1)\n\nDefault 500. Could be overridden by each listener.\n\n``` ini\nspring.rabbitmq.prefetch-count=50\n```\n\n\n### spring.rabbitmq.max-concurrent-consumers\n\n@Min(1)\n\nDefault 1\n\n``` ini\nspring.rabbitmq.max-concurrent-consumers=2\n```\n\n### spring.rabbitmq.api-port\n\n@Range(min = 1, max = 65535)\n\nDefault 15672\n\n``` ini\nspring.rabbitmq.api-port=65535\n```\n\n## QueueProperties\n\n#### spring.rabbitmq.queues[0].creation-enabled\n\nConfigures if the queue and its listener should be created. The possible existing queue will not be deleted!\n\nDefault: true\n\n``` ini\nspring.rabbitmq.queues[0].creation-enabled=false\n```\n\n#### spring.rabbitmq.queues[0].name\n\n@NotBlank\n\nConfigures the name of the queue. The name is also used to create the DLX (name + \".dlx\").\n\n``` ini\nspring.rabbitmq.queues[0].name=com.example.queue\n```\n\n#### spring.rabbitmq.queues[0].routing-key\n\nConfigures the binding of the queue to the exchange.\nEither `routing-key` or `routing-keys[*]` is necessary.\n\n``` ini\nspring.rabbitmq.queues[0].routing-key=example.routingkey\n```\n\n#### spring.rabbitmq.queues[0].routing-keys[0]\n\nConfigures the bindings of the queue to the exchange.\nEither `routing-key` or `routing-keys[*]` is necessary.\n\n``` ini\nspring.rabbitmq.queues[0].routing-keys[0]=example.routingkey.one\nspring.rabbitmq.queues[0].routing-keys[1]=example.routingkey.two\nspring.rabbitmq.queues[0].routing-keys[2]=example.routingkey.three.*\n```\n\n#### spring.rabbitmq.queues[0].limit\n\n@Min(1)\n\nConfigures the limit of the queue and his DLX and is necessary (min value of 1).\n\n\n``` ini\nspring.rabbitmq.queues[0].limit=10000\n```\n\n#### spring.rabbitmq.queues[0].durable\n\nConfigures the Queue.durable property.\nDefault is true.\nIs used for the queue AND his DLX.\n\n\n``` ini\nspring.rabbitmq.queues[0].durable=false\n```\n\n#### spring.rabbitmq.queues[0].exclusive\n\nConfigures the Queue.exclusive.\nDefault is false.\nIs used for the queue AND his DLX.\n\n\n``` ini\nspring.rabbitmq.queues[0].exclusive=false\n```\n\n#### spring.rabbitmq.queues[0].arguments[someAdditionalQueueArgumentsKey]\n\nAdds additional arguments for the queue.\n`x-dead-letter-exchange`, `x-dead-letter-routing-key` and `x-max-length` are added and would override existing entries with the same key.\nIs ONLY used for the queue NOT his DLX!\n\n\n``` ini\nspring.rabbitmq.queues[0].arguments[someAdditionalQueueArgumentsKey]=Value\n```\n\n#### spring.rabbitmq.queues[0].exchange.(ExchangeProperties)\n\n@Valid\n\nSee [ExchangeProperties](#exchangeproperties)\n\n#### spring.rabbitmq.queues[0].rabbit-admin.(RabbitAdminProperties)\n\n@NotNull\n\nSee [RabbitAdminProperties](#rabbitadminproperties)\n\n#### spring.rabbitmq.queues[0].listener.(ListenerProperties)\n\n@Valid\n\nSee [ListenerProperties](#listenerproperties)\n\n## RabbitTemplateProperties\n\n#### spring.rabbitmq.outbounds[0].bean-name\n\n@NotBlank\n\nConfigures the autowired bean name of the rabbit template.\nOne limit: Needs to be autowired with `@Lazy`!\n\n``` ini\nspring.rabbitmq.outbounds[0].bean-name=myRabbitTemplte\n```\n\n#### spring.rabbitmq.outbounds[0].routing-key\n\n@NotBlank\n\nConfigures the routing key for the rabbit template.\n\n``` ini\nspring.rabbitmq.outbounds[0].routing-key=example.routingkey\n```\n\n#### spring.rabbitmq.outbounds[0].exchange.(ExchangeProperties)\n\n@Valid\n\nSee [ExchangeProperties](#exchangeproperties)\n\n#### spring.rabbitmq.outbounds[0].message-converter.(MessageConverterProperties)\n\n@Valid\n\nSee [MessageConverterProperties](#messageconverterproperties)\n\n#### spring.rabbitmq.outbounds[0].connection-factory.(BeanReferenceConnectionFactoryProperties)\n\n@Valid\n\nSee [BeanReferenceConnectionFactoryProperties](#beanreferenceconnectionfactoryproperties)\n\n## RabbitAdminProperties\n\n#### .bean-name\n\n@NotBlank\n\nDefault: \"rabbitAdmin\"\n\n``` ini\nspring.rabbitmq.queues[0].rabbit-admin.bean-name=myRabbitAdmin\n```\n\n#### .connection-factory.(BeanReferenceConnectionFactoryProperties)\n\nSee [BeanReferenceConnectionFactoryProperties](#beanreferenceconnectionfactoryproperties)\n\n## MessageConverterProperties\n\nThis properties are resolved like this:\n\n- custom properties\n- default properties\n- check if the context already contains one message converter\n\n#### .bean-name\n\n@NotBlank\n\nThe autowired name of the bean.\n\n``` ini\nspring.rabbitmq.outbounds[0].message-converter.bean-name=jaxbMessageConverter\n```\n\n## ExchangeProperties\n\n#### .name\n\n@NotBlank\n\nThe name of the exchange.\n\n``` ini\nspring.rabbitmq.exchange.name=com.example\n```\n\n#### .type\n\n@NotNull\n\nDefault: TOPIC\nValues: TOPIC, DIRECT\n\n``` ini\nspring.rabbitmq.exchange.type=TOPIC\n```\n\n## ListenerProperties\n\n#### .creation-enabled\n\nConfigures if the listener should be created.\n\nDefault: true\n\n``` ini\nspring.rabbitmq.queues[0].listener.creation-enabled=false\n```\n\n#### .bean-name\n\n@NotBlank\n\nThe name of the SpringRabbitListener.\n\n``` ini\nspring.rabbitmq.queues[0].listener.bean-name=myListener\n```\n\n#### .message-converter.(MessageConverterProperties)\n\n@Valid\n\nSee [MessageConverterProperties](#messageconverterproperties)\n\n#### .prefetch-count\n\nCould be null or @Min(1)\n\n\n``` ini\nspring.rabbitmq.queues[0].listener.prefetch-count=30\n```\n\n#### .max-concurrent-consumers\n\nCould be null or @Min(1)\n\nDefault: 1\n\n``` ini\nspring.rabbitmq.queues[0].listener.max-concurrent-consumers=2\n```\n\n## CustomConnectionFactoryProperties\n\nThese properties should be used if more than one connection factory is needed. When used, make sure that the RabbitAutoConfiguration is disabled / excluded.\n\n#### .addresses\n\n@NotBlank\n\n``` ini\nspring.rabbitmq.connections[0].addresses=localhost\n```\n\n#### .username\n\n@NotBlank\n\n``` ini\nspring.rabbitmq.connections[0].username=guest\n```\n\n#### .password\n\n@NotBlank\n\n``` ini\nspring.rabbitmq.connections[0].password=guest\n```\n\n#### .virtual-host\n\n@NotBlank\nDefault: /\n\n``` ini\nspring.rabbitmq.connections[0].virtual-host=integrationtest\n```\n\n#### .bean-name\n\n@NotBlank\n\n``` ini\nspring.rabbitmq.connections[0].bean-name=myConnectionFactory\n```\n\n#### .api-port\n\n@Range(min = 1, max = 65535)\nDefault: 15672\n\n``` ini\nspring.rabbitmq.connections[0].api-port=15673\n```\n\n## BeanReferenceConnectionFactoryProperties\n\n#### .bean-name\n\n@NotBlank\n\nReference name of the specific custom connection factory [CustomConnectionFactoryProperties.bean-name](#customconnectionfactoryproperties.bean-name).\n\n``` ini\nspring.rabbitmq.outbounds[1].connection-factory.bean-name=myConnectionFactory\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favides%2Fspring-rabbit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favides%2Fspring-rabbit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favides%2Fspring-rabbit/lists"}