<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Moses Mucyo</title>
    <description>The latest articles on DEV Community by Moses Mucyo (@mosesmucyo).</description>
    <link>https://dev.to/mosesmucyo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1282570%2F5bfbbe46-7d1d-43e1-8ed0-50b832b5cdf7.png</url>
      <title>DEV Community: Moses Mucyo</title>
      <link>https://dev.to/mosesmucyo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mosesmucyo"/>
    <language>en</language>
    <item>
      <title>🔗 Consensus Algorithms in Blockchain: A Developer-Focused Guide</title>
      <dc:creator>Moses Mucyo</dc:creator>
      <pubDate>Sat, 02 Aug 2025 22:04:48 +0000</pubDate>
      <link>https://dev.to/mosesmucyo/consensus-algorithms-in-blockchain-a-developer-focused-guide-65f</link>
      <guid>https://dev.to/mosesmucyo/consensus-algorithms-in-blockchain-a-developer-focused-guide-65f</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;What is a Consensus Algorithm?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ujbzbagkazl7ltn0gz3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ujbzbagkazl7ltn0gz3.jpeg" alt=" " width="300" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In blockchain, a consensus algorithm is a mechanism that ensures all nodes in the network agree on the current state of the distributed ledger. This is essential because there is no central authority—the nodes must work together to validate and agree on new transactions and blocks.&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;Why Developers Should Care&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a developer, understanding consensus mechanisms helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose the right blockchain for your application.&lt;/li&gt;
&lt;li&gt;Optimize performance for specific use cases.&lt;/li&gt;
&lt;li&gt;Design decentralized apps (dApps) with the right trade-offs in
mind.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4vimjjppi9filjc20zz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4vimjjppi9filjc20zz.png" alt=" " width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Comparison Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1nv8tb5bgf9d872iqyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy1nv8tb5bgf9d872iqyh.png" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesfhhout6psrguxixc9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fesfhhout6psrguxixc9x.png" alt=" " width="800" height="162"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 Use Case-Based Recommendation&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ewxqbk9ist3zzr9s509.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ewxqbk9ist3zzr9s509.png" alt=" " width="800" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👨‍💻 &lt;strong&gt;Dev Notes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When building smart contracts, consensus type determines finality guarantees.&lt;/li&gt;
&lt;li&gt;In permissioned systems (e.g., Hyperledger), PBFT or Raft is a better fit than PoW or PoS.&lt;/li&gt;
&lt;li&gt;For real-time applications, finality and latency are critical, so avoid probabilistic methods like PoW.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📚 &lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://ethereum.org/en/upgrades/merge/" rel="noopener noreferrer"&gt;Ethereum Proof of Stake – Ethereum.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.bitcoin.org/devguide/p2p_network.html#proof-of-work" rel="noopener noreferrer"&gt;Bitcoin Proof of Work – bitcoin.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hyperledger-fabric.readthedocs.io/en/latest/consensus.html" rel="noopener noreferrer"&gt;Hyperledger Consensus – hyperledger-fabric.readthedocs.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.tendermint.com/" rel="noopener noreferrer"&gt;Tendermint Core – Cosmos SDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.eos.io/welcome/latest/protocol/dpos" rel="noopener noreferrer"&gt;EOS DPoS Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>blockchain</category>
      <category>webdev</category>
      <category>cryptography</category>
      <category>consensus</category>
    </item>
    <item>
      <title>🚀 Spring Boot + Kafka vs RabbitMQ: A Deep Dive into Event-Driven Microservices</title>
      <dc:creator>Moses Mucyo</dc:creator>
      <pubDate>Sat, 02 Aug 2025 21:24:21 +0000</pubDate>
      <link>https://dev.to/mosesmucyo/spring-boot-kafka-vs-rabbitmq-a-deep-dive-into-event-driven-microservices-6gd</link>
      <guid>https://dev.to/mosesmucyo/spring-boot-kafka-vs-rabbitmq-a-deep-dive-into-event-driven-microservices-6gd</guid>
      <description>&lt;p&gt;In the world of scalable microservices, messaging systems are crucial for decoupling services, improving resilience, and handling asynchronous workloads. Two popular tools that integrate seamlessly with Spring Boot are:&lt;/p&gt;

&lt;p&gt;Apache Kafka&lt;br&gt;
RabbitMQ&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80h4llf98b1367nkdarm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80h4llf98b1367nkdarm.png" alt=" " width="225" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s explore how they work, their differences, and how you can integrate both with Spring Boot.&lt;/p&gt;

&lt;p&gt;📌 What is Apache Kafka?&lt;br&gt;
Kafka is a distributed streaming platform designed for high-throughput and fault-tolerant real-time data pipelines. It's ideal for:&lt;/p&gt;

&lt;p&gt;Event sourcing&lt;br&gt;
Log aggregation&lt;br&gt;
Stream processing&lt;/p&gt;

&lt;p&gt;Kafka works on a publish-subscribe model with topics.&lt;/p&gt;

&lt;p&gt;📌 What is RabbitMQ?&lt;br&gt;
RabbitMQ is a message broker that supports multiple messaging protocols. It's widely used for task queues, delayed jobs, and RPC. It works on a queue-based model, using exchanges and bindings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b0rv5o2hfpqf93c3sx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b0rv5o2hfpqf93c3sx1.png" alt=" " width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔧 Integrating Kafka with Spring Boot&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r6bn7org67qkgnzos03.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6r6bn7org67qkgnzos03.png" alt=" " width="310" height="163"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3ursnl25bmmjp2nvwk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3ursnl25bmmjp2nvwk8.png" alt=" " width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add Kafka dependencies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;!-- pom.xml --&amp;gt;&lt;br&gt;
&amp;lt;dependency&amp;gt;&lt;br&gt;
  &amp;lt;groupId&amp;gt;org.springframework.kafka&amp;lt;/groupId&amp;gt;&lt;br&gt;
  &amp;lt;artifactId&amp;gt;spring-kafka&amp;lt;/artifactId&amp;gt;&lt;br&gt;
&amp;lt;/dependency&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Kafka Configuration
&lt;code&gt;# application.yml
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
  group-id: my-group
  auto-offset-reset: earliest
producer:
  key-serializer: org.apache.kafka.common.serialization.StringSerializer
  value-serializer: org.apache.kafka.common.serialization.StringSerializer
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kafka Producer&lt;br&gt;
`@Service&lt;br&gt;
public class KafkaProducer {&lt;br&gt;
@Autowired&lt;br&gt;
private KafkaTemplate kafkaTemplate;&lt;/p&gt;

&lt;p&gt;public void send(String message) {&lt;br&gt;
    kafkaTemplate.send("my-topic", message);&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
`&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kafka Consumer&lt;br&gt;
&lt;code&gt;@Component&lt;br&gt;
public class KafkaConsumer {&lt;br&gt;
@KafkaListener(topics = "my-topic", groupId = "my-group")&lt;br&gt;
public void listen(String message) {&lt;br&gt;
    System.out.println("Received: " + message);&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🐇 Integrating RabbitMQ with Spring Boot&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbm7utddlkxmulg5vsv54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbm7utddlkxmulg5vsv54.png" alt=" " width="310" height="163"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2am37vhuqhp377bubz12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2am37vhuqhp377bubz12.png" alt=" " width="225" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add RabbitMQ dependency
&lt;code&gt;&amp;lt;!-- pom.xml --&amp;gt;
&amp;lt;dependency&amp;gt;
&amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
&amp;lt;artifactId&amp;gt;spring-boot-starter-amqp&amp;lt;/artifactId&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;RabbitMQ Configuration
&lt;code&gt;# application.yml
spring:
rabbitmq:
host: localhost
port: 5672
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RabbitMQ Sender&lt;br&gt;
`@Service&lt;br&gt;
public class RabbitSender {&lt;br&gt;
@Autowired&lt;br&gt;
private RabbitTemplate rabbitTemplate;&lt;/p&gt;

&lt;p&gt;public void send(String message) {&lt;br&gt;
    rabbitTemplate.convertAndSend("my-queue", message);&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
`&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RabbitMQ Listener&lt;br&gt;
&lt;code&gt;@Component&lt;br&gt;
public class RabbitListenerService {&lt;br&gt;
@RabbitListener(queues = "my-queue")&lt;br&gt;
public void receive(String message) {&lt;br&gt;
    System.out.println("Received from RabbitMQ: " + message);&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🧪 When to Use What?&lt;br&gt;
Use Kafka for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large-scale stream processing&lt;/li&gt;
&lt;li&gt;Event sourcing&lt;/li&gt;
&lt;li&gt;Analytics pipelines&lt;/li&gt;
&lt;li&gt;Use RabbitMQ for:&lt;/li&gt;
&lt;li&gt;Task-based workloads&lt;/li&gt;
&lt;li&gt;Retry mechanisms&lt;/li&gt;
&lt;li&gt;Complex routing logic (fanout, topic, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧠 Final Thoughts&lt;br&gt;
Both Kafka and RabbitMQ are powerful tools, and Spring Boot provides first-class support for both. The choice depends on your use case — think throughput, message volume, and required guarantees.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>java</category>
      <category>springboot</category>
      <category>microservices</category>
    </item>
  </channel>
</rss>
