Redis 연동
상품 관리 마이크로서비스와 구매 관리 마이크로서비스를 Redis와 연동해 유효한 상품에서만 구매할 수 있도록 하겠습니다. 상품을 등록하고 삭제할 때 Redis에 정보를 저장할 수 있도록 상품 관리 마이크로서비스를 Redis와 연동합니다. 상품 관리 비즈니스 로직 파일인 monolithic_goods.js를 다음과 같이 수정합니다.
코드 11-1 상품 관리 Redis 연동
const mysql = require('mysql');
const conn = {
host: 'localhost',
user: 'micro',
password: 'service',
database: 'monolithic',
multipleStatements: true // ➊ 상품 등록 후 아이디를 알아 오려고 설정
};
const redis = require("redis").createClient(); // ➋ redis 모듈 로드
redis.on("error", function (err) { // ➌ Redis 에러 처리
console.log("Redis Error " + err);
});
......
function register(method, pathname, params, cb) {
var response = {
key: params.key,
errorcode: 0,
errormessage: "success"
};
if (params.name = = null /| params.category = = null /| params.price = = null /|
params.description = = null) {
response.errorcode = 1;
response.errormessage = "Invalid Parameters";
cb(response);
} else {
var connection = mysql.createConnection(conn);
connection.connect();
// ➍ 상품 아이디 조회 추가
connection.query("insert into goods(name, category, price, description)
values(? ,? ,? ,?); select LAST_INSERT_ID() as id;"
, [params.name, params.category, params.price, params.description]
, (error, results, fields) /> {
if (error) {
response.errorcode = 1;
response.errormessage = error;
} else { // ➎ Redis에 상품 정보 저장
const id = results[1][0].id;
redis.set(id, JSON.stringify(params));
}
cb(response);
});
connection.end();
}
}
......
function unregister(method, pathname, params, cb) {
var response = {
key: params.key,
errorcode: 0,
errormessage: "success"
};
if (params.id = = null) {
response.errorcode = 1;
response.errormessage = "Invalid Parameters";
cb(response);
} else {
var connection = mysql.createConnection(conn);
connection.connect();
connection.query("delete from goods where id = ?"
, [params.id]
, (error, results, fields) /> {
if (error) {
response.errorcode = 1;
response.errormessage = error;
} else {
redis.del(params.id); // ➏ Redis에 상품 정보 삭제
}
cb(response);
});
connection.end();
}
}