SlideShare a Scribd company logo
1 of 101
Download to read offline
RabbitMQ Operations
About me
About me
• RabbitMQ staff engineer at Pivotal
About me
• RabbitMQ staff engineer at Pivotal
• @michaelklishin just about everywhere
About this talk
About this talk
• Brain dump from years of answering questions
About this talk
• Brain dump from years of answering questions
• Focusses on the most recent release (3.5.6)
Provisioning
Provisioning
• Be aware of mirrors: GitHub, Bintray, …
Provisioning
• Be aware of mirrors: GitHub, Bintray, …
• Looking into community-hosted mirrors
Provisioning
• Be aware of mirrors: GitHub, Bintray, …
• Looking into community-hosted mirrors
• Use packages + Chef/Puppet/…
OS resources
OS resources
• Modern Linux defaults are absolutely inadequate
for servers
ulimit -n default: 1024
Set ulimit -n and fs.file-max to 500K
and forget about it
TCP keepalive timeout:
from 11 minutes to over 2
hours by default
net.ipv4.tcp_keepalive_time = 6
net.ipv4.tcp_keepalive_intvl = 3
net.ipv4.tcp_keepalive_probes = 3
enable client heartbeats, e.g. with an
interval of 6-12 seconds
OS resources
• Modern Linux defaults are absolutely inadequate
for servers
• Tuning for throughput vs. high number of
concurrent connections
Throughput: larger TCP buffers
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
rabbit.hipe_compile = true
(only on Erlang 17.x or 18.x)
Concurrent connections: smaller TCP
buffers, low tcp_fin_timeout,
tcp_tw_reuse = 1, …
rabbit.tcp_listen_options.sndbuf
rabbit.tcp_listen_options.recbuf
rabbit.tcp_listen_options.backlog
Reduce per connection
RAM use by 10x
rabbit.tcp_listen_options.sndbuf = 16384
rabbit.tcp_listen_options.recbuf = 16384
Reduce per connection
RAM use by 10x
Throughput drops by a comparable amount
net.ipv4.tcp_fin_timeout = 5
net.ipv4.tcp_tw_reuse = 1
Careful with tcp_tw_reuse
behind NAT*
* http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html
net.core.somaxconn = 4096
http://www.rabbitmq.com/networking.html
Disk space
Disk space
• Pay attention to what partition /var/lib ends up on
Disk space
• Pay attention to what partition /var/lib ends up on
• Transient messages can be paged to disk
Disk space
• Pay attention to what partition /var/lib ends up on
• Transient messages can be paged to disk
• RabbitMQ’s disk monitor isn’t supported on all
platforms
RAM usage
RAM usage
• rabbit.vm_memory_high_watermark
RAM usage
• rabbit.vm_memory_high_watermark
• rabbit.vm_memory_high_watermark_paging_ratio
rabbitmqctl status
rabbitmqctl report
RAM usage
• rabbit.vm_memory_high_watermark
• rabbit.vm_memory_high_watermark_paging_ratio
• Significant paging efficiency improvements in
3.5.5-3.5.6
RAM usage
• rabbit.vm_memory_high_watermark
• rabbit.vm_memory_high_watermark_paging_ratio
• Significant paging efficiency improvements in
3.5.5-3.5.6
• Disable rabbit.fhc_read_buffering (3.5.6+)
rabbitmqctl eval
‘file_handle_cache:clear_read_cache().’
recon
Ability to set VM RAM watermark as absolute
value is coming in 3.6
Stats collector falls behind
Stats collector falls behind
• Management DB stats collector can get
overwhelmed
Stats collector falls behind
• Management DB stats collector can get
overwhelmed
• Key symptom: disproportionally higher RAM use
on the node that hosts management DB
rabbitmqctl eval 'P = whereis(rabbit_mgmt_db), erlang:process_info(P).'
[{registered_name,rabbit_mgmt_db},
{current_function,{erlang,hibernate,3}},
{initial_call,{proc_lib,init_p,5}},
{status,waiting},
{message_queue_len,0},
{messages,[]},
{links,[<5477.358.0>]},
{dictionary,[{'$ancestors',[<5477.358.0>,rabbit_mgmt_sup,rabbit_mgmt_sup_sup,
<5477.338.0>]},
{'$initial_call',{gen,init_it,7}}]},
{trap_exit,false},
{error_handler,error_handler},
{priority,high},
{group_leader,<5477.337.0>},
{total_heap_size,167},
{heap_size,167},
{stack_size,0},
{reductions,318},
{garbage_collection,[{min_bin_vheap_size,46422},
{min_heap_size,233},
{fullsweep_after,65535},
{minor_gcs,0}]},
{suspending,[]}]
rabbit.collect_statistics_interval = 30000
rabbitmq_management.rates_mode = none
rabbitmqctl eval 'P = whereis(rabbit_mgmt_db), erlang:exit(P, please_crash).'
Parallel stats collector is coming in 3.7
Cluster formation
Cluster formation
• Node restart order dependency
Cluster formation
• Node restart order dependency
• github.com/rabbitmq/rabbitmq-clusterer
Cluster formation
• Node restart order dependency
• github.com/rabbitmq/rabbitmq-clusterer
• github.com/aweber/rabbitmq-autocluster
Backups
How do I back up?
• cp $RABBITMQ_MNESIA_DIR + tar
How do I back up?
• cp $RABBITMQ_MNESIA_DIR + tar
• Replicate everything off-site with exchange
federation + set message TTL via a policy
Hostname changes
rabbitmqctl rename_cluster_node [old name] [new name]
Network partition handling
Network partition handling
• When in doubt, use “autoheal”
Network partition handling
• When in doubt, use “autoheal”
• “Merge” is coming but has very real downsides,
too
Misc
Misc
• Don’t use default vhost and/or credentials
Misc
• Don’t use default vhost and/or credentials
• Don’t use 32-bit Erlang
Misc
• Don’t use default vhost and/or credentials
• Don’t use 32-bit Erlang
• Use reasonably up-to-date releases
Misc
• Don’t use default vhost and/or credentials
• Don’t use 32-bit Erlang
• Use reasonably up-to-date releases
• Participate in rabbitmq-users
Misc
• OCF resource template from Fuel (by Mirantis)
Misc
• OCF resource template from Fuel (by Mirantis)
• Use TLS
Coming in 3.6
Coming in 3.6
• In process file buffering disabled by default
Coming in 3.6
• In process file buffering disabled by default
• Queue master to node distribution strategies
Coming in 3.6
• In process file buffering disabled by default
• Queue master to node distribution strategies
• SHA-256 (or 512) for password hashing
Coming in 3.6
• In process file buffering disabled by default
• Queue master to node distribution strategies
• SHA-256 (or 512) for password hashing
• More responsive management UI with
pagination
Coming in 3.6
• In process file buffering disabled by default
• Queue master to node distribution strategies
• SHA-256 (or 512) for password hashing
• More responsive management UI with
pagination
• Streaming rabbitmqctl
Coming past 3.6
Coming past 3.6
• Pluggable cluster formation (à la ElasticSearch)
Coming past 3.6
• Pluggable cluster formation (à la ElasticSearch)
• On disk data recovery tools
Coming past 3.6
• Pluggable cluster formation (à la ElasticSearch)
• On disk data recovery tools
• Better CLI tools
Coming past 3.6
• Pluggable cluster formation (à la ElasticSearch)
• On disk data recovery tools
• Better CLI tools
• Easier off-site replication
Coming past 3.6
• Pluggable cluster formation (à la ElasticSearch)
• On disk data recovery tools
• Better CLI tools
• Easier off-site replication
• “Merge” partition handling strategy (no earlier
than 3.8)
Thank you
Thank you
• @michaelklishin
• github.com/michaelklishin
• rabbitmq-users
• Our team is hiring!

More Related Content

What's hot

What's hot (20)

Kafka: All an engineer needs to know
Kafka: All an engineer needs to knowKafka: All an engineer needs to know
Kafka: All an engineer needs to know
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
Fundamentals of Apache Kafka
Fundamentals of Apache KafkaFundamentals of Apache Kafka
Fundamentals of Apache Kafka
 
Apache Kafka - Martin Podval
Apache Kafka - Martin PodvalApache Kafka - Martin Podval
Apache Kafka - Martin Podval
 
Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)Hello, kafka! (an introduction to apache kafka)
Hello, kafka! (an introduction to apache kafka)
 
Apache kafka
Apache kafkaApache kafka
Apache kafka
 
Apache Kafka Best Practices
Apache Kafka Best PracticesApache Kafka Best Practices
Apache Kafka Best Practices
 
Apache Kafka Introduction
Apache Kafka IntroductionApache Kafka Introduction
Apache Kafka Introduction
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
 
RabbitMQ
RabbitMQ RabbitMQ
RabbitMQ
 
Scaling Push Messaging for Millions of Netflix Devices
Scaling Push Messaging for Millions of Netflix DevicesScaling Push Messaging for Millions of Netflix Devices
Scaling Push Messaging for Millions of Netflix Devices
 
Apache kafka
Apache kafkaApache kafka
Apache kafka
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 
Galera explained 3
Galera explained 3Galera explained 3
Galera explained 3
 
Rabbitmq basics
Rabbitmq basicsRabbitmq basics
Rabbitmq basics
 
Kafka pub sub demo
Kafka pub sub demoKafka pub sub demo
Kafka pub sub demo
 
Kafka presentation
Kafka presentationKafka presentation
Kafka presentation
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
Apache Kafka - Messaging System Overview
Apache Kafka - Messaging System OverviewApache Kafka - Messaging System Overview
Apache Kafka - Messaging System Overview
 

Viewers also liked

High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
James Carr
 
How to use KASAN to debug memory corruption in OpenStack environment- (2)
How to use KASAN to debug memory corruption in OpenStack environment- (2)How to use KASAN to debug memory corruption in OpenStack environment- (2)
How to use KASAN to debug memory corruption in OpenStack environment- (2)
Gavin Guo
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
paitoubing
 

Viewers also liked (20)

Troubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use itTroubleshooting RabbitMQ and services that use it
Troubleshooting RabbitMQ and services that use it
 
Troubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issuesTroubleshooting common oslo.messaging and RabbitMQ issues
Troubleshooting common oslo.messaging and RabbitMQ issues
 
Scalable Open Source
Scalable Open SourceScalable Open Source
Scalable Open Source
 
3 years with Clojure
3 years with Clojure3 years with Clojure
3 years with Clojure
 
RabbitMQ
RabbitMQRabbitMQ
RabbitMQ
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
 
How to Troubleshoot OpenStack Without Losing Sleep
How to Troubleshoot OpenStack Without Losing SleepHow to Troubleshoot OpenStack Without Losing Sleep
How to Troubleshoot OpenStack Without Losing Sleep
 
Open source responsibly
Open source responsiblyOpen source responsibly
Open source responsibly
 
How to use KASAN to debug memory corruption in OpenStack environment- (2)
How to use KASAN to debug memory corruption in OpenStack environment- (2)How to use KASAN to debug memory corruption in OpenStack environment- (2)
How to use KASAN to debug memory corruption in OpenStack environment- (2)
 
OpenStack Oslo Messaging RPC API Tutorial Demo Call, Cast and Fanout
OpenStack Oslo Messaging RPC API Tutorial Demo Call, Cast and FanoutOpenStack Oslo Messaging RPC API Tutorial Demo Call, Cast and Fanout
OpenStack Oslo Messaging RPC API Tutorial Demo Call, Cast and Fanout
 
Taming Command Bus
Taming Command BusTaming Command Bus
Taming Command Bus
 
Introduction to Heroku Postgres
Introduction to Heroku PostgresIntroduction to Heroku Postgres
Introduction to Heroku Postgres
 
Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQ
 
Rabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging PatternsRabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging Patterns
 
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mqRoman Kuznietsov: Zeromq: sockets on steroids.Zero mq
Roman Kuznietsov: Zeromq: sockets on steroids.Zero mq
 
ZeroMQ
ZeroMQZeroMQ
ZeroMQ
 
Hypervisor Selection in CloudStack and OpenStack
Hypervisor Selection in CloudStack and OpenStackHypervisor Selection in CloudStack and OpenStack
Hypervisor Selection in CloudStack and OpenStack
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
 
Taste Rabbitmq
Taste RabbitmqTaste Rabbitmq
Taste Rabbitmq
 
高性能No sql数据库redis
高性能No sql数据库redis高性能No sql数据库redis
高性能No sql数据库redis
 

Similar to RabbitMQ Operations

Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Ontico
 

Similar to RabbitMQ Operations (20)

A Detailed Look At cassandra.yaml (Edward Capriolo, The Last Pickle) | Cassan...
A Detailed Look At cassandra.yaml (Edward Capriolo, The Last Pickle) | Cassan...A Detailed Look At cassandra.yaml (Edward Capriolo, The Last Pickle) | Cassan...
A Detailed Look At cassandra.yaml (Edward Capriolo, The Last Pickle) | Cassan...
 
Kafka Needs no Keeper( Jason Gustafson & Colin McCabe, Confluent) Kafka Summi...
Kafka Needs no Keeper( Jason Gustafson & Colin McCabe, Confluent) Kafka Summi...Kafka Needs no Keeper( Jason Gustafson & Colin McCabe, Confluent) Kafka Summi...
Kafka Needs no Keeper( Jason Gustafson & Colin McCabe, Confluent) Kafka Summi...
 
lessons from managing a pulsar cluster
 lessons from managing a pulsar cluster lessons from managing a pulsar cluster
lessons from managing a pulsar cluster
 
Perforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and ReliabilityPerforce Administration: Optimization, Scalability, Availability and Reliability
Perforce Administration: Optimization, Scalability, Availability and Reliability
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
 
Percona XtraDB 集群文档
Percona XtraDB 集群文档Percona XtraDB 集群文档
Percona XtraDB 集群文档
 
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQAlvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
Alvaro Videla, Building a Distributed Data Ingestion System with RabbitMQ
 
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
4Developers 2015: Scaling LAMP doesn't have to suck - Sebastian Grodzicki
 
Tuning linux for mongo db
Tuning linux for mongo dbTuning linux for mongo db
Tuning linux for mongo db
 
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
Training Slides: Intermediate 202: Performing Cluster Maintenance with Zero-D...
 
Kafka blr-meetup-presentation - Kafka internals
Kafka blr-meetup-presentation - Kafka internalsKafka blr-meetup-presentation - Kafka internals
Kafka blr-meetup-presentation - Kafka internals
 
Evolution of MongoDB Replicaset and Its Best Practices
Evolution of MongoDB Replicaset and Its Best PracticesEvolution of MongoDB Replicaset and Its Best Practices
Evolution of MongoDB Replicaset and Its Best Practices
 
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
Ibm spectrum scale fundamentals workshop for americas part 2 IBM Spectrum Sca...
 
Linux-HA with Pacemaker
Linux-HA with PacemakerLinux-HA with Pacemaker
Linux-HA with Pacemaker
 
Linux Container Primitives and Runtimes - AWS Summit Sydney
Linux Container Primitives and Runtimes - AWS Summit SydneyLinux Container Primitives and Runtimes - AWS Summit Sydney
Linux Container Primitives and Runtimes - AWS Summit Sydney
 
Evolution Of MongoDB Replicaset
Evolution Of MongoDB ReplicasetEvolution Of MongoDB Replicaset
Evolution Of MongoDB Replicaset
 
Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)
 
Tuning Linux for MongoDB
Tuning Linux for MongoDBTuning Linux for MongoDB
Tuning Linux for MongoDB
 
Reliability Guarantees for Apache Kafka
Reliability Guarantees for Apache KafkaReliability Guarantees for Apache Kafka
Reliability Guarantees for Apache Kafka
 
VMworld 2013: Extreme Performance Series: Storage in a Flash
VMworld 2013: Extreme Performance Series: Storage in a Flash VMworld 2013: Extreme Performance Series: Storage in a Flash
VMworld 2013: Extreme Performance Series: Storage in a Flash
 

Recently uploaded

Recently uploaded (20)

Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 

RabbitMQ Operations