Working with Message Brokers

1. Implementing Publish-Subscribe Pattern

ElementDescription
PublisherEmits to topic; unaware of subscribers
TopicLogical channel
SubscriberOne copy per subscriber group
Fan-out1 message → N consumers
ExamplesKafka topic, RabbitMQ fanout exchange, SNS

2. Implementing Point-to-Point Pattern

ElementDescription
SenderPosts to queue
QueuePersistent FIFO buffer
ReceiverSingle consumer wins each message (competing consumers)
Use caseWork distribution: jobs, tasks
ExamplesSQS, RabbitMQ direct, Kafka w/ same group

3. Using Message Headers

HeaderUse
message-idUnique ID for dedup
correlation-idTrace business workflow
content-typeapplication/json, application/avro
schema-id / schema-versionSchema registry reference
timestampProducer event time
x-retry-countRetry tracking

4. Implementing Message Routing

StrategyDetail
Direct (routing key)Exact-match key → queue
Topic (wildcard)order.*.eu patterns
Header-basedMatch on header values
Content-basedRouter inspects payload
Kafka partitioningHash of key → partition

5. Handling Message Acknowledgment

ModeSemantics
Auto-ackAck on receive (at-most-once; lossy)
Manual ackAck after success (at-least-once)
Negative ack (nack)Reject & requeue or DLQ
Kafka commitCommit offsets after processing batch
SQS visibility timeoutHidden until processed/timeout

6. Implementing Dead Letter Queues

AspectDetail
TriggerMax delivery attempts exceeded
StorageSeparate queue / topic
MetadataFailure reason, attempt count, original headers
ActionManual replay, alert, archive
TipAlert on DLQ depth > 0

7. Using Message TTL

SettingDetail
Per-message TTLDrop after N ms in queue
Per-queue TTLDefault for all messages
Kafka retentionTime or size based (retention.ms)
Use caseStale order events, time-sensitive notifications
ExpiredDrop or route to DLQ

8. Implementing Message Ordering

MechanismDetail
Single partition/queueStrict FIFO; no parallelism
Partition keySame key → same partition (Kafka)
FIFO queues (SQS)Per MessageGroupId
RabbitMQPer-queue ordering with single consumer
Trade-offOrdering ⊥ throughput

9. Handling Poison Messages

StepAction
DetectRepeated processing failures
Limit retriesMax delivery count (e.g. 5)
QuarantineMove to DLQ with diagnostics
AlertPage on-call if rate spikes
ReplayAfter fix, re-publish from DLQ

10. Using Message Priority

ApproachDetail
Priority queuesRabbitMQ x-max-priority
Multiple queuesHigh/medium/low; weighted poll
Kafka workaroundSeparate topics per priority
CaveatRisk of starving low-priority work

11. Implementing Message Deduplication

TechniqueDetail
Producer dedupKafka idempotent producer (PID + seq)
SQS FIFO dedupMessageDeduplicationId within 5 min window
Consumer dedupStore processed message-id in Redis with TTL
Idempotent handlerUse natural keys; safe to re-run

12. Working with RabbitMQ, Kafka, AWS SQS/SNS

FeatureRabbitMQKafkaSQS / SNS
ModelQueue + ExchangeDistributed logQueue (SQS) / Pub-Sub (SNS)
Throughput10–100k msg/sMillions msg/sUnlimited (managed)
ReplayNo (consumed = gone)Yes (retain by time/size)No
OrderingPer-queuePer-partitionFIFO queues
Best forRouting, RPC, work queuesStreaming, event sourcingCloud-native decoupling