This RFC is predicated on these facts regarding Katello’s future:
- Pulp2 will be replaced by Pulp3 which does not use Qpid (no more katello-agent)
- The only remaining usage of Qpid would be delivering messages from Candlepin to Katello.
Several months back folks from Katello, Candlepin, and others met to determine a path forward with respect to the above. We concluded that by connecting Katello to Candlepin’s internal broker, ActiveMQ Artemis, Qpid could be removed from the architecture completely with the switchover the Pulp3.
Since this work doesn’t depend on Pulp3 we can reduce the amount of change in that cutover release by including the Artemis migration in an earlier one such as 3.16
Two deployment options:
Embedded Artemis
This is the initial recommendation. The advantage is that making this happen really only involves exposing a listener in Candlepin’s configuration for external connections and creating some new SSL certs for client and server.
The disadvantage is that, to my knowledge, there is no way to get any information about the broker - how many connections are open / how deep are the queues / etc. This is something useful that qpid gives us through qpid-stat
Standalone Artemis
The advantage here is that we can scale better in future architectures. The obvious example being multiple Candlepin instances all sharing a single Artemis broker. In fact, Red Hat’s internal Candlepin deployment of 10+ nodes is moving toward this configuration. There is also an excellent management interface for seeing all kinds of information including messages within queues.
The disadvantage is that more work will be required to achieve this setup relative to the embedded option. Packaging, installer, etc.
Future Work
Katello has its own internal event queue which is backed by a table in the database. This is a candidate for refactoring to take advantage of Artemis. Even in the embedded setup we have full control of the broker in terms of queues, connections, and so forth to make this possible.
Proof of Concept
I have a PR open against Katello which shows how this works via the STOMP protocol. The PR has notes on how to configure your environment if you’d like to give it a try.
The PR also demonstrates Katello’s internal event system using Artemis. While it does work well, I’m not necessarily advocating for its inclusion in the initial migration of consuming events from Candlepin.
Now it’s time for you to let me know your questions / thoughts / concerns!