NODEJS REDIS PUB & SUB MICRO SERVICE COMMUNUCATION
Merhabalar bu yazımızda redis pub & sub yöntemi ile nodejs tarafındaki micro servislerimizi nasıl haberleştirebiliriz ondan bahsediyor olacağız. Öncelikle redis nedir ondan bahsederek işe koyulalım.
Redis (Remote Dictionary Service) Nedir
C ile yazılmış, key-value şeklinde tasarlanmış bir NoSQL veritabanıdır. Veriyi bellekte tuttuğu için çok hızlı okuma ve yazma yapılır.
Redis (Pub & Sub) Nedir
Redis Pub & Sub (Publisher/Subscriber), Redis’in içinde dahili olarak gelen bir gayet basit ama kullanışlı bir mesajlaşma sistemidir. Publisher yani yayımcı, bir mesajı, gönderildiği kanalı takip eden alıcı veya alıcılara gönderir.
Özet
O halde redis pub & sub ile bir mesajı yayınlayıp (publish) bir diğer taraftan mesajı alabilirim(subscriber). Şimdi gelin bunu nodejs uygulamamıza uygulayalım. Örneğimizde iki adet servis olacak , ilk servis kullanıcılarla ilgili işlemleri yapan USER micro servisi , diğeri ise mail atmakla görevli olan MAIL micro servisi. Bir kullanıcıyı ben kayıt ettiğimde , mail servisine kullanıcı için mail atması gerektiğini söylüyor olacağım.
Örneğimizde Redis kurulu ve ayakta olarak kabul ediyor olacağız.
Yapılandırma ;
node_pub_sub klasörü oluşturup içerisine userservice
ve mailservice
isminde iki klasör olusturup userservice
içerisine gelip npm init -y diyerek boş bir proje olusturuyorum. Daha sonra ihtiyacım olan bağımlılıkları aşağıdaki gibi kuruyorum.
npm install --save express
npm install --save node-redis-pubsub
ve ardında app.js
dosyamı oluşturup aşağıdaki gibi
const express = require('express')
const NRP = require('node-redis-pubsub')
const app = express()
const router = express.Router()
const config = { port: 6379, scope: 'mail'}
const nrp = new NRP(config)
app.use(express.json())
router.post('/newuser', (req, res) => {
const { userName, email } = req.body
nrp.emit('send_mail', { email })
res.json({success: true,userName,email})
})
app.use(router)
app.listen(5000,()=>{
console.log('Server Running 5000')
})
örneğimizde userservice
içerisinde newuser endpointi için bir istek geldiginde nrp ile bir olay olusuturup bu olayın isminin send_mail
oldugunu belirttim , bu olay gerçekleşirken isteğin içerisinde gelen email adresini de parametre olarak göndermesini söyledim.
Şimdi sırada mailservice
için aynı işlemleri gerçekleştirip app.js
dosyamızı olusturup aşağıdaki gibi kodlayalım;
const express = require('express')
const NRP = require('node-redis-pubsub')
const app = express()
const router = express.Router()
const config = { port: 6379, scope: 'mail'}
const nrp = new NRP(config)
nrp.on('send_mail',(data)=>{console.log('email adresi',email)
}).....
app.listen(4000,()=>{
console.log('Server Running 4000')
})
yukarıda ise userservice
içerisindeki tetiklenen send_mail
olayı yakalanıp console üzerine mail adresi yazdırılmaktadır.
Herkese İyi Çalışmalar Dilerim.