Episode ini memandu kalian menjalankan nats-server langsung maupun via Docker, menyusun konfigurasi minimal, memakai perintah nats pub, nats sub, dan nats server check, lalu menghubungkan client library pertama ke server NATS.

Episode 2 memberi kalian peta konsep. Episode 3 ini adalah titik di mana teori mulai hidup: kalian akan benar-benar menjalankan server NATS, terhubung ke sana, dan mengirim pesan pertama. Tidak ada yang lebih memuaskan daripada melihat pesan melintas antar terminal.
Kita akan membahas tiga cara menjalankan server, menyusun konfigurasi minimal berbasis file, memakai CLI untuk publish dan subscribe, lalu menghubungkan client library pertama. Mari mulai.
Cara termudah adalah menjalankan binary langsung. Di terminal pertama:
nats-server -p 4222 -m 8222Flag -p 4222 menentukan port client, -m 8222 mengaktifkan port monitoring. Server akan menampilkan baris Listening for client connections on 0.0.0.0:4222 dan memblokir terminal.
Jika memakai Docker, perintahnya hampir sama. Container nats:2.14 sudah memiliki monitoring aktif di port 8222:
docker run -d --name nats -p 4222:4222 -p 8222:8222 nats:2.14Container nats:2.14 berjalan di latar belakang dengan nama nats. Cek log untuk memastikan server hidup:
docker logs nats | head -n 10Untuk pengaturan yang lebih terstruktur, gunakan file konfigurasi. Buat file nats.conf:
port: 4222
monitor_port: 8222
server_name: server-utama
jetstream {
store_dir: /data/jetstream
}Lalu jalankan server dengan file tersebut:
nats-server -c nats.confBlok jetstream di atas mengaktifkan JetStream sejak awal dengan direktori penyimpanan /data/jetstream. Kalian akan sering memakai file konfigurasi di episode 12 sampai 15.
Di terminal kedua, pasang subscriber dulu:
nats sub hello.worldDi terminal ketiga, kirim pesan:
nats pub hello.world "Halo dari CLI"Perintah nats pub hello.world "Halo dari CLI" mengirim pesan, dan terminal subscriber menampilkan Halo dari CLI beserta metadata seperti timestamp dan reply subject. Jika tidak ada subscriber saat publish, pesan di Core NATS akan hilang — wajar, dan itulah perilaku yang dirancang.
Untuk memastikan server dalam kondisi baik:
nats server checkOutput menunjukkan baris ok dengan informasi server, versi, dan cluster. Perintah nats server check ini akan menjadi andalan kalian setiap kali ingin memastikan server merespons.
Tip
Selalu pasang subscriber sebelum publisher mengirim pesan di Core NATS. Pesan yang dipublish tanpa subscriber akan langsung dibuang — ini bukan bug, melainkan desain untuk kecepatan maksimal.
Client library adalah jembatan antara aplikasi dan server. Contoh dengan nats-py:
import asyncio
import nats
async def main():
nc = await nats.connect("nats://localhost:4222")
async def on_message(msg):
print(f"Subject {msg.subject}: {msg.data.decode()}")
await nc.subscribe("hello.world", cb=on_message)
await nc.publish("hello.world", b"Hello dari Python")
await asyncio.sleep(1)
await nc.close()
asyncio.run(main())await nats.connect("nats://localhost:4222") membuka koneksi, nc.publish("hello.world", b"Hello dari Python") mengirim pesan, dan callback on_message mencetak pesan yang diterima. Jalankan dengan python main.py dan lihat pesan berhasil melintas.
Di Go, nats.go menawarkan API sinkron dan async:
package main
import (
"log"
"github.com/nats-io/nats.go"
)
func main() {
nc, err := nats.Connect("nats://localhost:4222")
if err != nil {
log.Fatal(err)
}
defer nc.Close()
_, err = nc.Subscribe("hello.world", func(m *nats.Msg) {
log.Printf("Subject %s: %s", m.Subject, string(m.Data))
})
if err != nil {
log.Fatal(err)
}
nc.Publish("hello.world", []byte("Hello dari Go"))
select {}
}nc.Connect("nats://localhost:4222") di Go membuka koneksi, dan nc.Subscribe("hello.world", handler) mendaftarkan callback yang dipanggil setiap ada pesan masuk.
Sebagai penutup praktik episode ini, pastikan alur lengkap bekerja:
nats-server -p 4222 -m 8222 &
nats server check
nats pub ping.pong "pong"
nats sub ping.pongJika nats server check mengembalikan ok dan pesan ping-pong diterima subscriber, kalian resmi terhubung ke NATS. Server, CLI, dan client library sudah saling memahami — langkah berikutnya tinggal memperdalam pola komunikasi.
Episode 3 membawa kalian dari nol ke koneksi pertama: menjalankan nats-server langsung atau via Docker, menyusun konfigurasi minimal dengan blok jetstream, memakai nats pub, nats sub, dan nats server check, serta menghubungkan client Python dan Go pertama.
Inti yang harus dibawa pulang:
-c nats.conf.nats server check adalah pemeriksaan kesehatan tercepat.Di episode 4 selanjutnya kita akan membahas subjects & wildcards — hierarki subject orders.created.eu, best practice penamaan berbasis event-driven, serta perbedaan * dan > beserta implikasinya terhadap permission dan subscription. Di sinilah seni routing NATS mulai dikuasai.