Merge Channels in Go(lang)
Recently, I had to deal with receiving several events from Kafka. There were about 6 different types of events, but internally, the ways I had to deal with them were quite similar — so I decided for a generic method.
From Kafka, I was receiving events in individual channels (one channel per event type)
As my handling of the events was the one generic method, I wanted to take all the channels, merge them into a single channel which has all the events from all channels, combined*, from which I can pick one at at time**, and deal with it.
Doing it in Go was a breeze. Seriously, in 10 lines, all was done.
Here’s how I did it. (well, business events are replaced by integers here ;) )
I have two channels — one which delivers me odd numbers, and another one which delivers even numbers. And here’s how one can merge them.
Note that the function accepts a slice of channels — so, it doesn’t matter whether it’s just two channels, or 100.
For completion, here’s my sample program which contains the channel creations as well.
Run it as follows:
go run channelmerge.goAnd you’ll see all whole numbers being printed on your screen. (warning: infinite loop)
If you look closely, you’ll see that they are not all in order — of course, the channels are not synchronised with each other.
Cool. ah?
Signing off,
Sands.
*Combining the channels would give me a better solution than having 6 different loops to do the same thing, and having to add more such loops when I have more events-types**Naturally, at some point of time, I would want to speed that up,.. That we can do in another post for ThreadPooling
About the author
We have other interesting reads
Next.JS isn't all that bad.
Though I am primarily a backend/system developer, I have worked with frontend for a long time. Coffeescript, React JS/Native when it was just in beta, Rails, plain HTML/CSS, React when it matured a bit more, etc.
Smarter Machines, Fewer Headaches: AI-Powered Predictive Maintenance for Hydraulic Systems
Note: Interested in self-healing infrastructure? Check out my article on Revolutionizing Kubernetes Configuration Management with KHook and…
Deploy Like a Pro: Zero Downtime Using Docker, GitHub Actions, and EC2
Deploying applications with minimal downtime is crucial for ensuring a seamless user experience. This article explores how to achieve an almost zero downtime deployment using GitHub Actions and Docker.
