Chris,
If intermediary queueing is required in your case then you are on the right track. Both apps will have to deal with connectivity issues
with both their inputs (Icinga2, RabbitMQ) and outputs (RabbitMQ, Carbon-cache).
Note that such "middleware" does add a fair share of complexity so I'd recommend weighting that against the benefit
you'd get.
There is a couple of RabbitMQ plugins that are basically "socket gateways" (e.g. the UDP exchange) to RabbitMQ exchanges
but I don't think I've seen anything that targets your specific needs and there are downsides to developing things as plugins
(from doing it in Erlang or Elixir to keeping track of RabbitMQ internal changes between releases).
Pika is the recommended library for Python.