我的公司从一个使用微服务的相对较小的项目开始。可以想象,代码共享的热门话题出现了,什么该共享,什么不该共享。争论的焦点之一是在一个库中共享实际的 express server listen() 代码并在多个服务中使用。我觉得这是错误的,因为我相信这通过共享初始化代码将两个服务紧密结合在一起。我同事天说我们已经加上快递了。这种共享方法是正确的做法吗?此外,他没有将路由和控制器分离到它们的结构中,是的,代码很小,但不确定如何快速找到路由。
以下是分享的内容。我对有更多经验的人对这种方法的看法很感兴趣。
let app = express();
let app_ready = false;
function check_alive(request, response, callback?:(req:any, resp:any) => void) {
console.log("alive state requested");
if (callback === undefined) {
// no alive_check callback provided
// use default
if (app_ready) {
response.status(200);
} else {
response.status(503);
}
response.json({ready: app_ready});
} else {
callback(request, response);
}
}
function check_ready(request, response, callback:(req:any, resp:any) => void) {
console.log("ready state requested");
callback(request, response);
}
exports.instance = app;
exports.init = (ready_check: (req:any,resp:any) => void, alive_check?:(req:any,resp:any) => void) => {
// basic routing
app.get("/liveness", (req, res) => {check_alive(req, res, alive_check);});
app.post("/liveness", (req, res) => {check_alive(req, res, alive_check);});
if (ready_check == undefined || ready_check == null) {
app.get("/readiness", (req, res) => {check_alive(req, res);});
app.post("/readiness", (req, res) => {check_alive(req, res);});
} else {
app.get("/readiness", (req, res) => {check_ready(req, res, ready_check);});
app.post("/readiness", (req, res) => {check_ready(req, res, ready_check);});
}
};
exports.listen = (port, callback) => {
return app.listen(port, () => {
app_ready = true;
callback();
});
}
exports.get = (url:string, callback:any) => {
app.get(url, callback);
}
exports.post = (url:string, callback:any) => {
app.post(url, callback);
}
编辑:所以虽然这段代码在技术上是正确的,但应用程序初始化函数是否应该包含在共享库中?如果不是,为什么不和什么应该和不应该共享?
我在 medium、devops 和这个网站上读过很多文章,说只要你可以独立部署、重启等,它就是一个微服务。
提前感谢您的任何见解。