Microservice với Golang, NodeJS và gRPC (Phần 2)
Bài đăng này đã không được cập nhật trong 3 năm
Tiếp tục phần 1, phần này mình sẽ tạo một con node server
để connect đến core server
và cũng chỉ để hiển thị hello world
Node Server
- Cũng tương tự như phần trước, phần này mình sẽ tạo một folder proto nhưng bên trong nó phức tạp hơn chút vì phải compile proto sang js.
- Tạo một file
package.json
ngang cấp vớihelloworld.proto
package.json
{
"name": "node-server-proto",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"proto-gen": "export PROTO_DEST=./ && protoc -I ./ --plugin=\"protoc-gen-grpc=./node_modules/.bin/grpc_tools_node_protoc_plugin\" --js_out=\"import_style=commonjs,binary:${PROTO_DEST}\" --grpc_out=${PROTO_DEST} ./*.proto"
// ở đây có cả option cho typescript, nếu bạn cần thì để lại comment nhé
},
"author": "",
"license": "ISC",
"devDependencies": {
"grpc-tools": "^1.10.0"
}
node golang gRPC Happy New Year
Tiếp tục [phần 1](https://viblo.asia/p/microservice-voi-golang-nodejs-va-grpc-phan-1-jvElamq6lkw), phần này mình sẽ tạo một con `node server` để connect đến `core server` và cũng chỉ để hiển thị `hello world`
### Node Server
- Cũng tương tự như phần trước, phần này mình sẽ tạo một folder proto nhưng bên trong nó phức tạp hơn chút vì phải compile proto sang js.
- Tạo một file `package.json` ngang cấp với `helloworld.proto`
package.json
}
để đơn giản hơn cho việc generate file complie, mình dã viết sẵn đoạn script và bạn chỉ cần chạy npm run proto-gen
(sau khi npm install) là ok, và cấu trúc thư mục nó sẽ thế này
Sau khi thực hiện xong proto, thì mình sẽ tạo file app.js
để thực hiện hóa việc connect tới core server
và vẫn tạo thêm package.json
trông nó như thế này
{
"name": "node-server",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node app.js" // đoạn này viết cho nó phức tạp thôi, chứ bạn chạy luôn node app.js cho nhanh nhé =))
},
"author": "",
"license": "ISC",
"devDependencies": {
"grpc": "^1.24.4",
"minimist": "^1.2.0",
"google-protobuf": "^3.0.0"
},
"dependencies": {}
}
và file app.js
var messages = require('./proto/helloworld_pb');
var services = require('./proto/helloworld_grpc_pb');
var grpc = require('grpc');
var parseArgs = require('minimist');
function main() {
var argv = parseArgs(process.argv.slice(2), {
string: 'target'
});
var target;
if (argv.target) {
target = argv.target;
} else {
target = 'localhost:50053';
}
var client = new services.GreeterClient(target,
grpc.credentials.createInsecure());
var request = new messages.HelloRequest();
var user;
if (argv._.length > 0) {
user = argv._[0];
} else {
user = 'world';
}
request.setName(user);
client.sayHello(request, function(err, response) {
console.log('Greeting:', response.getMessage());
});
}
main();
Đọc code thì cũng rất dễ hiểu phải không =))
(dòng kết qủa trên là test với go-server
nhé)
Và đây là kết qủa sau khi chạy lệnh node app.js
Và đây là toàn bộ cấu trúc thư mục của mình Nếu phát triển theo hướng microservice, thì theo mình bạn nên tạo mỗi server là một github phát triển riêng (chí ít là chia theo module) để cố gắng không ảnh hưởng nhất có thể đến những thứ đã được thực hiện, và việc một line github giành riêng cho việc phát triển riêng cho proto.
Kết thúc
- Vậy là mình đã trình bày xong việc sử dụng microservice với
golang-golang
,golang-nodejs
(giao tiếp giua các server) - Và đây là source code của hai phần mình đã viết
All rights reserved