5 分鐘搭建 Node.js 微服務(wù)原型
微服務(wù)已成為在 Node.js 中構(gòu)建可擴(kuò)展且強(qiáng)大的云應(yīng)用的主流方法。同時(shí)也存在一些門檻,其中一些難點(diǎn)需要你在以下方面做出決策:
- 組織項(xiàng)目結(jié)構(gòu)。
- 將自定義服務(wù)連接到第三方服務(wù)(數(shù)據(jù)庫(kù),消息代理等)
- 處理微服務(wù)之間共享的代碼。
- 將項(xiàng)目容器化。
- 在本地運(yùn)行和調(diào)試,然后將其部署到云中。
SMF 框架是開箱即用的解決方案:
https://github.com/krawa76/smf
讓我們看看它如何幫你創(chuàng)建和部署微服務(wù)原型而 無(wú)需編寫任何代碼。
創(chuàng)建項(xiàng)目
安裝框架,創(chuàng)建一個(gè)新項(xiàng)目并 cd 到項(xiàng)目目錄:
- 1$ npm install -g sokyra-microservice-factory
- 2$ smf new test-stack
- 3$ cd test-stack
帶有演示服務(wù)的樣板代碼已生成,我們可以輕松地運(yùn)行該項(xiàng)目:
- 1$ smf up
這將生成 Docker工件(docker-compose 和環(huán)境變量文件),構(gòu)建映像并在本地運(yùn)行容器:

docker-compose 日志
如果在編輯器中打開項(xiàng)目,則會(huì)看到帶有 main.ts 模塊的自動(dòng)生成的 demo 服務(wù),該服務(wù)在上面的日志中生成了記錄。其他的重要文件是 smf-stack.json (項(xiàng)目配置), smf-env.json (容器 env 變量),通用的 Dockerfile 和 smf-docker.yml (docker-compose):

演示服務(wù),main 模塊
要停止項(xiàng)目,請(qǐng)運(yùn)行
- 1$ smf down
添加新服務(wù)
讓我們添加一項(xiàng)服務(wù),該服務(wù)可以通過(guò)消息代理發(fā)送和接收消息,并將某些內(nèi)容保存到數(shù)據(jù)庫(kù)中:
- 1$ smf add service service1
選擇 RabbitMQ 和 MongoDB ,然后輸入 “0” 退出菜單:

這將在 main 模塊中創(chuàng)建新的帶有樣板代碼的 service 子文件夾:

讓我們?cè)俅芜\(yùn)行該項(xiàng)目查看其運(yùn)行情況:
- 1$ smf up
現(xiàn)在我們有 4 個(gè)容器在運(yùn)行:RabbitMQ、MongoDB、demo 和 service1。后者通過(guò) RabbitMQ 發(fā)送接收消息,并將模擬數(shù)據(jù)保存到 MongoDB:

docker-compose 日志
可以再次使用 smf down 命令停止該項(xiàng)目。
我們可以類似地添加更多服務(wù),如果選擇相同的消息代理服務(wù),它們都會(huì)通過(guò)消息中心交換消息。
部署
將我們的項(xiàng)目部署到安裝了 Docker 和 Docker-Compose 的遠(yuǎn)程服務(wù)器上很容易。如果你還沒有,請(qǐng)按照以下簡(jiǎn)單說(shuō)明在 Amazon AWS EC2 中創(chuàng)建它:
https://github.com/krawa76/smf/blob/master/README-provisioner.md
還需要 Docker Hub 帳戶。如果丟失,你可以在這里免費(fèi)注冊(cè):
https://hub.docker.com/
在編輯器中打開 smf-deploy.json 文件,并填寫 Docker Hub 登錄名及密碼、主機(jī)地址和遠(yuǎn)程計(jì)算機(jī) SSH 憑據(jù)(ssh密鑰路徑)。

運(yùn)行以下命令部署項(xiàng)目:
- 1$ smf deploy
當(dāng)該過(guò)程結(jié)束時(shí),我們可以 ssh 到遠(yuǎn)程機(jī)器,并查看在那里運(yùn)行的微服務(wù):
- 1$ ssh -i "/Users/me/.ssh/aws-key.pem" ubuntu@ec2-x-x-x-x.compute1.amazonaws.com$ docker ps
- 2(gives the list of services)$ docker logs -f test-stack-service1
- 3(give the live log)
現(xiàn)在,我們?cè)谠浦杏辛巳萜骰⒎?wù)棧的有效原型。
下一步是什么?
開始添加更多邏輯。由于每個(gè)服務(wù)都是一個(gè)單獨(dú)的NPM軟件包,因此我們可以進(jìn)入到 service 文件夾,安裝其他軟件包,在 main.ts 模塊中編寫模式代碼,添加新的 JavaScript 模塊,等等:
- 1$ cd services/service1
- 2$ npm install ...
編碼愉快!