Setting Up Danube Go Client with Message Brokers on Kubernetes

In this article, I’ll guide you through the steps to use the Danube Go client library to interact with Danube PubSub messaging brokers running on a Kubernetes cluster hosted locally. Here’s a diagram of the setup:: The setup includes: The Producer - We’ll run the script outlined in this post, which actually creates three producers (./pubsub-go-demo producer). The Consumer - Similarly, three distinct consumers are created (./pubsub-go-demo consumer). Danube Brokers - These are running on Kubernetes, with Nginx as the ingress controller and etcd for persistent metadata storage.
Read more →

Danube: Queuing and Pub/Sub patterns

Danube is an open-source, distributed publish-subscribe (Pub/Sub) message broker system developed in Rust. Danube aims to be a powerful, flexible and scalable messaging solution. Currently, the Danube platform exclusively supports Non-persistent messages. Meaning that the messages reside solely in memory and are promptly distributed to consumers if they are available, utilizing a dispatch mechanism based on subscription types For comprehensive information on setting up, configuring, and using Danube, please refer to the official documentation and the previous article.
Read more →

Danube - Pub-Sub message broker

Danube is an open-source, distributed publish-subscribe (Pub/Sub) message broker system developed in Rust. Inspired by the Apache Pulsar messaging and streaming platform, Danube incorporates some similar concepts but is designed to carve its own path within the distributed messaging ecosystem. At the time of writing, the Danube platform is in the early stages of development and may have missing or incomplete functionalities. Use with caution. Contributions are welcome, and you can also report any issues you encounter.
Read more →

Practical guide to Error Handling in Rust

Effective error handling ensures that a program can gracefully handle unexpected situations and errors, making the software more robust and reliable. Well-designed error messages help users understand what went wrong and how to correct it, and contribute to the overall user experience using the library or the API. In this article I’ll gradually go through a number of options of handling errors in Rust and try to explain the benefits of using a method vs the other.
Read more →

Builder Pattern in Go and Rust

The Builder Pattern is a design pattern that provides a way to construct a complex object step by step, focusing on breaking down the construction of the object into smaller, more manageable steps. It separates the construction of a object from its representation, allowing the same construction process to create different variations or representations of the final object. This helps improve code readability, especially when dealing with objects that have a large number of attributes or configurations.
Read more →

Fan-Out, Fan-In pipeline in Go and Rust

In this article I’m exploring the process of implementing a Fan-Out/ Fan-In pipeline in Go and Rust. Fan-Out is a term to describe the process of starting multiple workers to handle input from the pipeline, and Fan-In is a term to describe the process of combining multiple results into one channel. I’m assuming that you have some familiarity with both Go and Rust languages. I’m new to Rust also, therefore it’s fair to say that this is about concurrency in Go & Rust through the eyes of a GO developer.
Read more →

Part 2: Diagnose Go code - beginner guide

This is the continuation of the previous post. I would strongly recommend reading Part 1 first then continue here as the description of the program, the intent and the current state are relevant as we move forward. Iter 3 - Remove Contention # Iter 3 code on Github Reading line by line from the stream and sending those over to the goroutines to be processed works, but may not be the most efficient way to process a large file.
Read more →