We are exploring creating an integration system to connect and communicate with systems outside of our company. We are leaning towards adopting Apache Camel. However, a few of us would rather work with the Beam than the JVM.
Is there any integration system in Elixir that is similar to Apache Camel? I have tried searching, but search is sort of broken on the internet right now. I am getting a lot of garbage pages. I am going to keep looking, though.
That said, if someone in the Elixir community knows the answer, that would be awesome. I would love to add that hypothetical framework to the proposal
Never heard of Camel before but had a peek at the docs…
Instead of “Elixir alternative to Camel,” I think the better question to ask is: What are you trying to do in Camel and how can you do that with Elixir instead?
Just from skimming the docs, I see hints of plain Elixir/OTP features, Phoenix, and GenStage/Broadway.
Take this reply with a grain of salt. I am biased. I cringed when I saw “Enterprise Integration Pattern.”
If you have existing dependencies written in Java or other JVM language, or the “enterprisey” aspect is guiding the decision, maybe the BEAM or anything else might be a hard sell.
But it seems there’s room for proposing alternatives, in which case you could compare the many patterns of message-based communication listed in EIPs :: Apache Camel with native/equivalent solutions in the BEAM (as in previous answers in the thread).
This talk is amazing. Thanks for linking to it. We currently don’t run JVM in our systems. We would introduce either JVM or BEAM. For once, there is a bias in favor of BEAM, but we still have to make our case. That talk is a strong case
Are you actually needing the rule-based payload routing functionality of Apache Camel? If not then I am not sure what’s the issue in adopting literally any message queue.
A quick update. First of all, thanks so much for your replies. Your insights and links helped me a lot with the research.
As of right now, we are going to move forward with Elixir using GenStage as the core of the system. I am writing a prototype right now to make sure we don’t run into any blocker that can doom the project.