Skip to content

Widhian Bramantya

coding is an art form

Menu
  • About Me
Menu
nats

Object Store in NATS: Storing Files and Blobs

Posted on September 6, 2025September 6, 2025 by admin

Example in Go

Create an Object Store Bucket

js, _ := nc.JetStream()
obj, _ := js.CreateObjectStore(&nats.ObjectStoreConfig{
    Bucket: "ASSETS",
})

Put an Object

file, _ := os.Open("logo.png")
defer file.Close()

obj.PutFile("logo", "logo.png")

Get an Object

file, _ := obj.Get("logo")
defer file.Close()

data, _ := io.ReadAll(file)
fmt.Println("Object size:", len(data))

Watch for Updates

watch, _ := obj.Watch()
for info := range watch.Updates() {
    if info != nil {
        fmt.Printf("Object %s updated, size %d\n", info.Name, info.Size)
    }
}

Use Case Examples

  1. Static Assets
    • Store images, icons, or JSON config files for distributed services.
  2. Machine Learning Models
    • Keep the latest model file in the object store.
    • Workers can fetch and reload the model when it changes.
  3. Backups and Snapshots
    • Periodically push database dumps or logs into the object store.

Object Store vs Key-Value Store

FeatureKey-Value StoreObject Store
Data sizeSmall values (configs, flags)Larger files and binary blobs
AccessGet/Put by keyGet/Put by object name
Use caseFeature flags, discovery, coordinationFiles, models, assets, backups

Final Thoughts

The NATS Object Store is a powerful extension of JetStream. It turns NATS into not just a messaging system, but also a distributed storage system. While it’s not meant to replace a full file system or S3, it’s perfect for storing and syncing critical assets inside a NATS-powered architecture.

Related posts:

Request–Reply in NATS: One-to-One Messaging

NATS JetStream: Persistence and Streaming Made Simple

Queue Groups in NATS: Load Balancing for Subscribers

See also  Introduction to NATS: A Lightweight Messaging System
Pages: 1 2
Category: NATS

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Linkedin

Widhian Bramantya

Recent Posts

  • Smart Automation in PostgreSQL: Managing Time-Based Data with pg_partman and pg_cron
  • Understanding PostgreSQL WAL, Slot, Publication, LSN, and Replication Lag
  • PostgreSQL Write-Ahead Log (WAL): Durability, Performance Tuning, and Recovery Explained
  • PostgreSQL Replication Deep Dive: From High Availability to Multi-Master Clusters
  • Finding Nearby Merchants in a Ride-Hailing App Using Elasticsearch Polygon Search
  • Advanced Text Search in Elasticsearch: N-Gram, Reverse, Fuzzy, and Search-as-you-type
  • Understanding and Customizing Analyzers in Elasticsearch
  • Log Management at Scale: Integrating Elasticsearch with Beats, Logstash, and Kibana
  • Index Lifecycle Management (ILM) in Elasticsearch: Automatic Data Control Made Simple
  • Blue-Green Deployment in Elasticsearch: Safe Reindexing and Zero-Downtime Upgrades
  • Maintaining Super Large Datasets in Elasticsearch
  • Elasticsearch Best Practices for Beginners
  • Implementing the Outbox Pattern with Debezium
  • Production-Grade Debezium Connector with Kafka (Postgres Outbox Example – E-Commerce Orders)
  • Connecting Debezium with Kafka for Real-Time Streaming
  • Debezium Architecture – How It Works and Core Components
  • What is Debezium? – An Introduction to Change Data Capture
  • Offset Management and Consumer Groups in Kafka
  • Partitions, Replication, and Fault Tolerance in Kafka
  • Delivery Semantics in Kafka: At Most Once, At Least Once, Exactly Once

Recent Comments

No comments to show.

Archives

  • October 2025
  • September 2025
  • August 2025
  • November 2021
  • October 2021
  • August 2021
  • July 2021
  • June 2021
  • March 2021
  • January 2021

Categories

  • Debezium
  • Devops
  • ElasticSearch
  • Golang
  • Kafka
  • Lua
  • NATS
  • PostgreSQL
  • Programming
  • RabbitMQ
  • Redis
  • VPC
© 2026 Widhian Bramantya | Powered by Minimalist Blog WordPress Theme