# message queue

Published articles for message queue.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## What is Infrastructure from Code?

DevFeed: [What is Infrastructure from Code?](<https://devfeed.tech/articles/what-is-infrastructure-from-code-17860.md>)

Original publisher: [Read original article](<https://encore.dev/blog/what-is-infrastructure-from-code>)

Author: Ivan Cernja

Published: 2026-03-17T00:00:00Z

Content type: article

Language: en

Sources: [Encore Updates](<https://devfeed.tech/sources/encore-updates.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Terraform](<https://devfeed.tech/topics/terraform.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [AWS IAM](<https://devfeed.tech/topics/aws-iam.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [aws](<https://devfeed.tech/tags/aws.md>), [caching](<https://devfeed.tech/tags/caching.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [code](<https://devfeed.tech/tags/code.md>), [database](<https://devfeed.tech/tags/database.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [least-privilege](<https://devfeed.tech/tags/least-privilege.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [terraform](<https://devfeed.tech/tags/terraform.md>)

### AI overview

The article explains Infrastructure from Code (IFC), an approach that declares infrastructure such as databases, queues, and scheduled jobs in application code. It describes how frameworks derive cloud resources from those declarations and argues that AI-generated application changes have increased the need to keep infrastructure synchronized.

### Source excerpt

How it works, why AI made it urgent, and what the trade-offs are.

## HubSpot Incident Report for October 20, 2025

DevFeed: [HubSpot Incident Report for October 20, 2025](<https://devfeed.tech/articles/hubspot-incident-report-for-october-20-2025-29106.md>)

Original publisher: [Read original article](<https://product.hubspot.com/blog/incident-report-for-october-20-2025>)

Author: Kartik Vishwanath

Published: 2025-11-11T17:09:36Z

Content type: news

Language: en

Sources: [HubSpot](<https://devfeed.tech/sources/hubspot.md>)

Topics: [incident](<https://devfeed.tech/topics/incident.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>), [Resilience](<https://devfeed.tech/topics/resilience.md>), [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>), [Amazon EC2](<https://devfeed.tech/topics/amazon-ec2.md>), [AWS IAM](<https://devfeed.tech/topics/aws-iam.md>), [DynamoDB](<https://devfeed.tech/topics/dynamodb.md>)

Tags: [amazon](<https://devfeed.tech/tags/amazon.md>), [amazon-sqs](<https://devfeed.tech/tags/amazon-sqs.md>), [analysis](<https://devfeed.tech/tags/analysis.md>), [aws](<https://devfeed.tech/tags/aws.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [data](<https://devfeed.tech/tags/data.md>), [database](<https://devfeed.tech/tags/database.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [dynamodb](<https://devfeed.tech/tags/dynamodb.md>), [ec2](<https://devfeed.tech/tags/ec2.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [failover](<https://devfeed.tech/tags/failover.md>), [hubspot](<https://devfeed.tech/tags/hubspot.md>), [iam](<https://devfeed.tech/tags/iam.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [incident](<https://devfeed.tech/tags/incident.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [outage](<https://devfeed.tech/tags/outage.md>), [recovery](<https://devfeed.tech/tags/recovery.md>), [report](<https://devfeed.tech/tags/report.md>), [resilience](<https://devfeed.tech/tags/resilience.md>)

### AI overview

HubSpot reports that a severe AWS outage in the us-east-1 region on October 20, 2025 disrupted multiple product features and affected third-party vendors. The incident caused failures involving DynamoDB, IAM, SQS, and EC2, and degraded HubSpot's TQ2 background task processing. HubSpot says it completed an analysis and is implementing resilience improvements.

### Source excerpt

On October 20, 2025, HubSpot experienced a significant service disruption affecting multiple product features due to a severe AWS outage in the us-east-1 region. While our infrastructure remained intact, the widespread nature of the cloud provider failure impacted both our services and critical third-party vendors we rely on. We've completed a thorough analysis of this incident and are implementing comprehensive improvements to strengthen our resilience against future cloud provider disruptions.

## A fictional story about vanishing messages in Snap's microservices

DevFeed: [A fictional story about vanishing messages in Snap's microservices](<https://devfeed.tech/articles/spooky-stories-the-vanishing-messages-at-snap-tower-35990.md>)

Original publisher: [Read original article](<https://temporal.io/blog/spooky-stories-the-vanishing-messages-at-snap-tower>)

Author: Tim Imkin

Published: 2024-10-31T07:00:00Z

Content type: opinion

Language: en

Sources: [Temporal Blog](<https://devfeed.tech/sources/temporal-blog.md>)

Topics: [Messaging](<https://devfeed.tech/topics/messaging.md>), [Microservice](<https://devfeed.tech/topics/microservice.md>), [Traces](<https://devfeed.tech/topics/traces.md>)

Tags: [community](<https://devfeed.tech/tags/community.md>), [debug](<https://devfeed.tech/tags/debug.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [messages](<https://devfeed.tech/tags/messages.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [snap](<https://devfeed.tech/tags/snap.md>), [traces](<https://devfeed.tech/tags/traces.md>)

### AI overview

A fictional spooky story follows an on-call engineer investigating failures in Snap's microservices, including disappearing messages, queue errors, traces pointing to nonexistent workflows, and unexplained anomalies.

### Source excerpt

They say something strange happens deep within Snap Tower, hidden behind the pristine walls and endless lines of code.

## Building a Scalable Job Consumer System in Go

DevFeed: [Building a Scalable Job Consumer System in Go](<https://devfeed.tech/articles/building-a-scalable-job-consumer-system-in-go-22870.md>)

Original publisher: [Read original article](<https://medium.com/mindorks/building-a-scalable-job-consumer-system-in-go-e513a7ae1d39?source=rss----f1a763fc7443---4>)

Author: ansu jain

Published: 2024-10-16T06:48:50Z

Content type: tutorial

Language: en

Sources: [Mindorks - Medium](<https://devfeed.tech/sources/mindorks-medium.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>)

Tags: [consumer](<https://devfeed.tech/tags/consumer.md>), [go](<https://devfeed.tech/tags/go.md>), [goroutines](<https://devfeed.tech/tags/goroutines.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [parallel](<https://devfeed.tech/tags/parallel.md>), [sqs](<https://devfeed.tech/tags/sqs.md>), [workers](<https://devfeed.tech/tags/workers.md>)

### AI overview

This tutorial presents a scalable job consumer system in Go. It describes interfaces for queue consumption, job management, job handling, and configuration, with parallel workers processing messages from queues such as AWS SQS.

### Source excerpt

In this article, I will walk through the design of a scalable and extensible job consumer system using Go. This system allows the flexible registration of different jobs and the parallel consumption of messages from a message queue. I'll focus on how this system can be used to handle real-world scenarios like payment processing, order proccesing etc where different jobs consume messages from a queue (e.g., AWS SQS) and execute business logic based on the type of message received. Key Components of the Design IMessageConsumer - A generic interface for interacting with message queues (e.g., SQS). IJobManager - An interface that coordinates jobs and workers, responsible for consuming messages and distributing them to registered jobs. IJobHandler - An interface representing individual jobs. Each job implements specific business logic. IQueueConfig - Provides configurations for the queue (e.g., queue name, region, broker type). IJobConfig - Provides job-level configurations (e.g., number of consumers, timeouts). Core Concepts1. IMessageConsumer This interface abstracts queue operations, exposing methods for dequeuing and deleting messages. It's implemented by specific brokers (such as SQS in this case). Here's a basic structure: type IMessageConsumer interface { Dequeue(noOfMessages int64) ([]Message, error) Delete(messageIdentifier string) error } Dequeue: Fetches messages from the queue. Delete: Deletes a message after it has been successfully processed. 2. IJobManager This is where the system's core orchestration happens. The JobManager manages a pool of registered jobs and starts multiple workers to process messages concurrently. It uses a Consume method to begin processing and a RegisterJob method to register jobs into the system. type IJobManager interface { Consume(ctx context.Context) RegisterJob(job IJobHandler) } RegisterJob: Adds a job to the manager's job list. Consume: Starts the workers that process messages from the queue in parallel for each registered jo

## How Hotstar Built a Scalable Real-Time Emoji System for Sports Viewing

DevFeed: [How Hotstar Built a Scalable Real-Time Emoji System for Sports Viewing](<https://devfeed.tech/articles/capturing-a-billion-emo-j-i-ons-33601.md>)

Original publisher: [Read original article](<https://highscalability.com/capturing-a-billion-emo-j-i-ons/>)

Author: ByteByteGo

Published: 2024-03-26T15:32:38Z

Content type: article

Language: en

Sources: [High Scalability](<https://devfeed.tech/sources/high-scalability-3.md>)

Topics: [Emoji](<https://devfeed.tech/topics/emoji.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [API](<https://devfeed.tech/topics/api.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [client](<https://devfeed.tech/topics/client.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [article](<https://devfeed.tech/tags/article.md>), [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [emojis](<https://devfeed.tech/tags/emojis.md>), [http](<https://devfeed.tech/tags/http.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [scalability](<https://devfeed.tech/tags/scalability.md>)

### AI overview

This article explains how Hotstar built an in-house system to collect user-submitted emojis in real time, condense them into an emoji swarm showing audience mood, and support very high submission volumes. It covers horizontal scalability, component decomposition, asynchronous processing, load balancing, auto-scaling, and HTTP API request handling.

### Source excerpt

This blog post was written by Dedeepya Bonthu. This is a repost from her Medium article, approved by the author. In stadiums, sports fans love to express themselves by cheering for their favorite teams, holding up placards and team logos. Emoji's allow fans at home to rapidly express

## Recap: Apache Pulsar Sessions in CommunityOverCode Asia 2023

DevFeed: [Recap: Apache Pulsar Sessions in CommunityOverCode Asia 2023](<https://devfeed.tech/articles/recap-apache-pulsar-sessions-in-communityovercode-asia-2023-12755.md>)

Original publisher: [Read original article](<https://pulsar.apache.org/blog/2023/08/28/pulsar-sessions-in-communityovercode-aisa-2023/>)

Author: tison

Published: 2023-08-30T00:00:00Z

Content type: article

Language: en

Sources: [Apache Pulsar Blog](<https://devfeed.tech/sources/apache-pulsar-blog.md>)

Topics: [Apache Pulsar](<https://devfeed.tech/topics/pulsar.md>), [Kafka](<https://devfeed.tech/topics/kafka.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>), [Containers](<https://devfeed.tech/topics/containers.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [huawei](<https://devfeed.tech/topics/huawei.md>)

Tags: [apache](<https://devfeed.tech/tags/apache.md>), [aws](<https://devfeed.tech/tags/aws.md>), [cloud-native](<https://devfeed.tech/tags/cloud-native.md>), [clusters](<https://devfeed.tech/tags/clusters.md>), [conference](<https://devfeed.tech/tags/conference.md>), [huawei](<https://devfeed.tech/tags/huawei.md>), [io](<https://devfeed.tech/tags/io.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [load-balancer](<https://devfeed.tech/tags/load-balancer.md>), [load-balancing](<https://devfeed.tech/tags/load-balancing.md>), [lts](<https://devfeed.tech/tags/lts.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [new-features](<https://devfeed.tech/tags/new-features.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [production](<https://devfeed.tech/tags/production.md>), [recap](<https://devfeed.tech/tags/recap.md>)

### AI overview

A recap of Apache Pulsar sessions at CommunityOverCode Asia 2023, covering the Pulsar 3.0 first LTS release, new load-balancing and delayed-message features, Direct IO optimization, container-focused cloud-native improvements, and traffic-limiting practices involving Pulsar and Kafka.

### Source excerpt

The CommunityOverCode Asia 2023 conference (previously known as ApacheCon Asia) has been held from August 18th to August 20th.

## Replicating Database Changes to a Message Queue is Tricky

DevFeed: [Replicating Database Changes to a Message Queue is Tricky](<https://devfeed.tech/articles/replicating-database-changes-to-a-message-queue-is-tricky-20759.md>)

Original publisher: [Read original article](<https://www.evanjones.ca/replicating-db-to-queue.html>)

Published: 2022-12-13T02:01:42Z

Content type: tutorial

Language: en

Sources: [Evan Jones](<https://devfeed.tech/sources/evan-jones.md>)

Topics: [Database](<https://devfeed.tech/topics/database.md>), [Kafka](<https://devfeed.tech/topics/kafka.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [database](<https://devfeed.tech/tags/database.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

This article explains why replicating database changes to a message queue can produce missing or extra updates when components fail. It compares parallel and sequential approaches and recommends using a database transaction to update application state and record pending messages at a single commit point.

### Source excerpt

Let's imagine we have an program that stores its state in a database, and we want other programs to do things when changes occur. For example, we might want to send email notifications if a bank balance drops below a threshold. This is a very common reason applications use message queues like Kafka. Unfortunately, the "trivial" implementation does not work when components fail. I suspect there are many real applications that get this wrong. Most of the time, these applications work correctly, and the changes are replicated across multiple systems. However, when things restart, updates can go missing, or extra updates can appear. In this article, I'm going to try to explain how this can go wrong, and some ways to fix it. Attempt one: Update both in parallel The application performs the following operations: Write the change to the database. At the same time, publish the message to the message queue. The problem in this case is that the database update could fail, but publishing the message succeeds. This means applications consuming the stream receive an "extra" update that does not exist in the database. Attempt two: Update database, then publish message Okay, let's try again, and make sure that updating the database succeeds: Write the change to the database. Wait for the database to confirm the write occurred. Publish the message to the message queue. We fixed the "extra" message update problem! However, we still have a problems: If the application crashes after writing to the database, but before publishing the message, the stream is missing an update. This can be particularly bad if the message queue is unavailable. The application can retry publishing the message for a while. However, if the message queue is down for long enough, it is likely the application will run out of memory, or be restarted. In this case, all the pending updates are lost. So now what? We can't do the operations sequentially, and we can't do them in parallel. The trick is to order the wor

## Never ever use a database as a message queue. Do this instead.

DevFeed: [Never ever use a database as a message queue. Do this instead.](<https://devfeed.tech/articles/never-ever-use-a-database-as-a-message-queue-do-this-instead-6011.md>)

Original publisher: [Read original article](<https://turso.tech/blog/never-ever-use-a-database-as-a-message-queue-do-this-instead-f99c188b>)

Author: Glauber Costa

Published: 2022-08-23T00:00:00Z

Content type: article

Language: en

Sources: [Turso Blog](<https://devfeed.tech/sources/turso-blog.md>)

Topics: [Turso](<https://devfeed.tech/topics/turso.md>), [SQLite](<https://devfeed.tech/topics/sqlite.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [libSQL](<https://devfeed.tech/topics/libsql.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [database](<https://devfeed.tech/tags/database.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [libsql](<https://devfeed.tech/tags/libsql.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [queue](<https://devfeed.tech/tags/queue.md>), [sqlite](<https://devfeed.tech/tags/sqlite.md>), [turso](<https://devfeed.tech/tags/turso.md>)

### AI overview

The article argues against using a database as a message queue and proposes an alternative. The supplied text describes Turso as a backend and data-layer platform built from a rewrite of SQLite, with database access over the wire and synchronization to devices and servers. It also notes that the post references an older version of Turso.

### Source excerpt

If you are an application developer and need a full backend, including the data layer, you have two choices: Relying on a backend team may be the solution we all want. But often, especially with...

## Live Video Transmuxing/Transcoding: FFmpeg vs TwitchTranscoder, Part II

DevFeed: [Live Video Transmuxing/Transcoding: FFmpeg vs TwitchTranscoder, Part II](<https://devfeed.tech/articles/live-video-transmuxing-transcoding-ffmpeg-vs-twitchtranscoder-part-ii-20453.md>)

Original publisher: [Read original article](<https://medium.com/twitch-news/live-video-transmuxing-transcoding-ffmpeg-vs-twitchtranscoder-part-ii-4973f475f8a3?source=rss----3ae745429979--engineering>)

Author: Yueshi Shen

Published: 2017-10-23T21:08:55Z

Content type: article

Language: en

Sources: [Twitch](<https://devfeed.tech/sources/twitch.md>)

Topics: [FFmpeg (Fast Forward Moving Picture Experts Group)](<https://devfeed.tech/topics/ffmpeg.md>), [Transcodings](<https://devfeed.tech/topics/transcodings.md>), [Code](<https://devfeed.tech/topics/code.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [C](<https://devfeed.tech/topics/c.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [code](<https://devfeed.tech/tags/code.md>), [decoding](<https://devfeed.tech/tags/decoding.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [ffmpeg](<https://devfeed.tech/tags/ffmpeg.md>), [files](<https://devfeed.tech/tags/files.md>), [function](<https://devfeed.tech/tags/function.md>), [loops](<https://devfeed.tech/tags/loops.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [programming](<https://devfeed.tech/tags/programming.md>), [thread](<https://devfeed.tech/tags/thread.md>), [threading](<https://devfeed.tech/tags/threading.md>), [threads](<https://devfeed.tech/tags/threads.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

This second part of a two-part series examines FFmpeg Release 3.3's threading model and transcoding pipeline for a one-input, multiple-output scenario. It traces how FFmpeg orchestrates I/O, filtering, decoding, encoding, and output processing, and reports that the number of input files determines input-thread creation, so a one-input scenario uses a single thread.

### Source excerpt

By: Jeff Gong, Software Engineer, jeffgon@twitch.tv Sahil Dhanju, Software Engineer Intern Chih-Chiang Lu, Senior Software Engineer, chihchil@twitch.tv Yueshi Shen, Principal Research Engineer, yshen@twitch.tv Special thanks go to: Christopher Kennedy, Staff Video Engineer at Crunchyroll/Ellation John Nichols, Principal Software Engineer at Xilinx, jnichol@xilinx.com for their information on FFmpeg and reviewing this article. Note: This is the second part of a 2-part series. Make sure you read Part 1 first. FFmpeg's 1-In-N-Out Pipeline. Why doesn't it handle the technical issues discussed earlier? How does FFmpeg programmatically deal with instances where a single input stream is required to generate multiple transcoded and/or transmuxed outputs? We went directly into the latest FFmpeg Release 3.3. source code in order to understand its threading model and transcoding pipeline. In the top-level ffmpeg.c file, the transcode() function (line 4544) loops and repeatedly calls transcode_step() (line 4478) until its inputs are completely processed, or until the user interrupts the execution. Transcode_step() wraps the main pipeline and orchestrates file I/O, filtering, decoding and encoding amongst many other immediate steps. During the initial setup phase, init_input_threads() (line 4020) is called, and based on the number of input files, a number of new threads may be spawned to process the input. if (nb_input_files == 1) { return 0;}for (i = 0; i < nb_input_files; i++) { ... ret = av_thread_message_queue_alloc(&f->in_thread_queue, f->thread_queue_size, sizeof(AVPacket)); // line 4033} In line 4033, we see that the number of threads spawned is solely determined by the number of inputs. This means FFmpeg will process a 1-in-N-out scenario using only a single thread. In get_input_packet() (line 4055), the multithreaded companion function get_input_packet_mt() (line 4047) is only called if the number of input files is greater than one. get_input_packet_mt() can read input

## Disque: A Message Broker Designed for Reliable Message Delivery

DevFeed: [Disque: A Message Broker Designed for Reliable Message Delivery](<https://devfeed.tech/articles/adventures-in-message-queues-20679.md>)

Original publisher: [Read original article](<http://antirez.com/news/88>)

Published: 2015-03-15T22:32:15Z

Content type: article

Language: en

Sources: [Antirez](<https://devfeed.tech/sources/antirez.md>)

Topics: [Redis](<https://devfeed.tech/topics/redis.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [broker](<https://devfeed.tech/tags/broker.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [queue](<https://devfeed.tech/tags/queue.md>), [redis](<https://devfeed.tech/tags/redis.md>)

### AI overview

The article introduces Disque, an in-development message broker, and explains why developers often use Redis as a message queue. It discusses the differences between Redis data structures and immutable messages, along with at-most-once and at-least-once delivery semantics.

### Source excerpt

EDIT: In case you missed it, Disque source code is now available at http://github.com/antirez/disque It is a few months that I spend ~ 15-20% of my time, mostly hours stolen to nights and weekends, working to a new system. It's a message broker and it's called Disque. I've an implementation of 80% of what was in the original specification, but still I don't feel like it's ready to be released. Since I can't ship, I'll at least blog... so that's the story of how it started and a few details about what it is. ~ First steps ~ Many developers use Redis as a message queue, often wrappered via some library abstracting away Redis low level primitives, other times directly building a simple, ad-hoc queue, using the Redis raw API. This use case is covered mainly using blocking list operations, and list push operations. Redis apparently is at the same time the best and the worst system to use like that. It's good because it is fast, easy to inspect, deploy and use, and in many environments it was already one piece of the infrastructure. However it has disadvantages because Redis mutable data structures are very different than immutable messages. Redis HA / Cluster tradeoffs are totally biased towards large mutable values, but the same tradeoffs are not the best ones to deal with messages. One thing that is important to guarantee for a message broker is that a message is delivered either at least one time, or at most one time. In short given that to guarantee an exact single delivery of a message (where for delivery we intent a message that was received *and* processed by a worker) is practically impossible, the choices are that the message broker is able to guarantee either 0 or 1 deliveries, or 1 to infinite deliveries. This is often referred as at-most-once semantics, and at-least-once semantics. There are use cases for the first, but the most interesting and practical semantics is the latter, that is, to guarantee that a message is delivered at least one time, and deliver mu

## A journey on the Android Main Thread -- Lifecycle bits

DevFeed: [A journey on the Android Main Thread -- Lifecycle bits](<https://devfeed.tech/articles/a-journey-on-the-android-main-thread-lifecycle-bits-15468.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/a-journey-on-the-android-main-thread-lifecycle-bits>)

Author: P-Y Ricau

Published: 2013-12-26T17:05:00Z

Content type: article

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [components](<https://devfeed.tech/tags/components.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [crash](<https://devfeed.tech/tags/crash.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [main-thread](<https://devfeed.tech/tags/main-thread.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [queue](<https://devfeed.tech/tags/queue.md>), [thread](<https://devfeed.tech/tags/thread.md>)

### AI overview

This article examines how Android's main thread interacts with activity lifecycle events, especially configuration changes. It explains that an orientation change can recreate an activity by posting messages such as CONFIGURATION_CHANGED and RELAUNCH_ACTIVITY to the main thread looper queue.

### Source excerpt

Written by Pierre-Yves Ricau.

## The Robust Realtime Server

DevFeed: [The Robust Realtime Server](<https://devfeed.tech/articles/the-robust-realtime-server-19980.md>)

Original publisher: [Read original article](<http://engineering.hackerearth.com/2013/05/31/the-robust-realtime-server/>)

Published: 2013-05-31T00:00:00Z

Content type: article

Language: en

Sources: [HackerEarth](<https://devfeed.tech/sources/hackerearth.md>)

Topics: [Server](<https://devfeed.tech/topics/server.md>), [Socket.IO](<https://devfeed.tech/topics/socket-io.md>), [Meteor](<https://devfeed.tech/topics/meteor.md>), [Database](<https://devfeed.tech/topics/database.md>), [Web](<https://devfeed.tech/topics/web.md>), [Cache](<https://devfeed.tech/topics/cache.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [browser](<https://devfeed.tech/tags/browser.md>), [cache](<https://devfeed.tech/tags/cache.md>), [code](<https://devfeed.tech/tags/code.md>), [communication](<https://devfeed.tech/tags/communication.md>), [database](<https://devfeed.tech/tags/database.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [server](<https://devfeed.tech/tags/server.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

This developer article describes a realtime server that updates webpages when database or cache data changes. It discusses scaling problems with nowjs and socket.io, including connection limits and file descriptor leaks, then explains choosing Tornado as an alternative. The described code-submission workflow uses a web server, RabbitMQ message queues, a code-checker engine, asynchronous processing, and browser notifications.

### Source excerpt

This is going to be a long blog post but I promise you will find some interesting piece of engineering here, so stay till the end. The realtime server manages the live update of webpages when the data changes in the data storage system (database or cache). We had a realtime server in-place but there was a big problem with scaling it. ####Problem with nowjs I was told beforehand that I will be primarily working first on writing a realtime server beside many other things. Vivek Prakash told me he had written a realtime server implementation sometime ago with nowjs. But the problem with it is that it doesn't scale well beyond ~200 simultaneous connections. In a conversation on Google Groups, I came across this: In my experience, the underlying "socket.io" module is not able to scale well (more than 150 connections was a problem for me), so I had to retreat from using "nowjs" or more specifically, "socket.io" in one of my applications. After further inspection, we also saw that there was an issue with file descriptor leak and nowjs server reported ENFILE/EMFILE (Too many open files). Also nowjs project was abandoned in 2012 and last commit in github repo is that of 1 year ago. So there was need of some good alternative which can handle large number of simultaneous connections (or users). I didn't have to do much research as Vivek had already researched about it. He found Tornado and Meteor.js to be good alternative. Going by order of preference and popularity I chose Tornado, and also because it's integration with existing system looked simpler and more efficient. ####The Use Case Vivek pretty much explained me how different components of code submission works. Here is a quick explanation of it. User submits the code and a POST request is sent to webserver which further sends submission details to a message queue in RabbitMQ server (a message broker to connect various application components). Code-checker engine (consumer of RabbitMQ here) gets the submission details, e

## Building NSQ Client Libraries

DevFeed: [Building NSQ Client Libraries](<https://devfeed.tech/articles/building-nsq-client-libraries-19702.md>)

Original publisher: [Read original article](<https://word.bitly.com/post/50027069647>)

Author: Wordbitly

Published: 2013-05-09T18:58:23Z

Content type: tutorial

Language: en

Sources: [Bitly](<https://devfeed.tech/sources/bitly.md>)

Topics: [Messaging](<https://devfeed.tech/topics/messaging.md>), [client](<https://devfeed.tech/topics/client.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [servers](<https://devfeed.tech/topics/servers.md>), [HTTP](<https://devfeed.tech/topics/http.md>)

Tags: [asynchronous](<https://devfeed.tech/tags/asynchronous.md>), [client-library](<https://devfeed.tech/tags/client-library.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [developers](<https://devfeed.tech/tags/developers.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [guide](<https://devfeed.tech/tags/guide.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [nsq](<https://devfeed.tech/tags/nsq.md>), [tcp](<https://devfeed.tech/tags/tcp.md>), [thundering-herd](<https://devfeed.tech/tags/thundering-herd.md>)

### AI overview

A guide to the responsibilities and design expectations of NSQ client libraries, focusing on consumers. It covers configuration, discovery, TCP connections, message handling, pipelining, asynchronous processing, and techniques for maintaining cluster robustness and performance.

### Source excerpt

Brace yourself, this is a long one. The following guide was originally intended for client library developers to describe in detail all the important features and functionality we expected in an NSQ client library. While writing it we began to realize that it had value beyond client library developers. It incorporates a comprehensive analysis of most of the capabilities of NSQ (both client and server) and is therefore interesting and useful for end-users as well (or anyone using or interested in infrastructure messaging platforms). If you need some background on NSQ please see our original blog post or its follow up, spray some NSQ on it. Intro NSQ's design pushes a lot of responsibility onto client libraries in order to maintain overall cluster robustness and performance. This guide attempts to outline the various responsibilities well-behaved client libraries need to fulfill. Because publishing to nsqd is trivial (just an HTTP POST to the /put endpoint), this document focuses on consumers. By setting these expectations we hope to provide a foundation for achieving consistency across languages for NSQ users. Overview Configuration Discovery (optional) Connection Handling Feature Negotiation Data Flow / Heartbeats Message Handling RDY State Backoff Configuration At a high level, our philosophy with respect to configuration is to design the system to have the flexibility to support different workloads, use sane defaults that run well "out of the box", and minimize the number of dials. A client subscribes to a topic on a channel over a TCP connection to nsqd instance(s). You can only subscribe to one topic per connection so multiple topic consumption needs to be structured accordingly. Using nsqlookupd for discovery is optional so client libraries should support a configuration where a client connects directly to one or more nsqd instances or where it is configured to poll one or more nsqlookupd instances. When a client is configured to poll nsqlookupd the polling int

## Choosing a message queue for Python on Ubuntu on a VPS

DevFeed: [Choosing a message queue for Python on Ubuntu on a VPS](<https://devfeed.tech/articles/choosing-a-message-queue-for-python-on-ubuntu-on-a-vps-35377.md>)

Original publisher: [Read original article](<https://darkcoding.net/software/choosing-a-message-queue-for-python-on-ubuntu-on-a-vps/>)

Author: Graham King

Published: 2009-08-10T05:05:13Z

Content type: comparison

Language: en

Sources: [Graham King](<https://devfeed.tech/sources/graham-king.md>)

Topics: [Messaging](<https://devfeed.tech/topics/messaging.md>), [RabbitMQ](<https://devfeed.tech/topics/rabbitmq.md>), [NumPy](<https://devfeed.tech/topics/numpy.md>), [Ubuntu](<https://devfeed.tech/topics/ubuntu.md>), [Redis](<https://devfeed.tech/topics/redis.md>)

Tags: [comparison](<https://devfeed.tech/tags/comparison.md>), [gearman](<https://devfeed.tech/tags/gearman.md>), [message-queue](<https://devfeed.tech/tags/message-queue.md>), [python](<https://devfeed.tech/tags/python.md>), [queue](<https://devfeed.tech/tags/queue.md>), [rabbitmq](<https://devfeed.tech/tags/rabbitmq.md>), [redis](<https://devfeed.tech/tags/redis.md>), [software](<https://devfeed.tech/tags/software.md>), [ubuntu](<https://devfeed.tech/tags/ubuntu.md>)

### AI overview

A comparison of RabbitMQ, Gearman, Beanstalkd, and Redis as message queues for Python web applications running on Ubuntu VPS environments. It considers Python compatibility, memory usage, reliability, and suitability for background work.

### Source excerpt

Queuing up the best message options: A straightforward comparison of popular message queues.