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
Achieving Resilience: High Availability Strategies in Kubernetes
In cloud computing, it’s important to keep services running smoothly, even when maintenance tasks like updating or restarting nodes are necessary.
Resume Tailor — from side project to Product
Running a software agency has many advantages — it’s overall wonderful, but not without a few pain-points.
Introducing Cronochat: Supercharge Your Slack with Recurring, Scheduled, Broadcast, and Anonymous…
Cronochat is a simple, powerful Slack app.
