傻大方提要:【数据格式|[微服务架构 】微服务简介,第1部分( 二 )】传输和数据格式:微服务适用于任何传输和数据格式;但是 , 它们通常通过HTTP上的RESTful API公开公开 。 任何适合您的信息的数据格式 。HTTP + JSON现在非常...
按关键词阅读: 数据库 数据格式 API HTTP 微服务
传输和数据格式:微服务适用于任何传输和数据格式;但是 , 它们通常通过HTTP上的RESTful API公开公开 。 任何适合您的信息的数据格式 。HTTP + JSON现在非常流行 , 但是没有什么可以阻止你使用协议缓冲区而不是AMQP 。
把事情做正确所有这些问题都可以系统地处理 。 我们将探索本系列文章中的技巧和模式来处理它们 。 以下是我们将来在帖子中讨论的内容:
- API代理
- 记录
- 服务发现和注册
- 服务依赖性
- 数据共享和同步
- 优雅的失败
- 自动部署和实例化
对于我们的示例 , 我们将从Sandrino Di Mattia的关于使用Flux进行调试的优秀帖子中选择后端代码 。 在Sandrino的帖子中 , 一个简单的express.js应用程序为React.js应用程序制作了后端 。 我们将采用后端并对其进行调整 。 您可以在此处查看原始后端代码 。
Sandrino示例中的后端处理许多不同的问题:登录 , 身份验证 , CORS , 票证更新操作和查询 。 对于我们的微服务 , 我们将专注于一项任务:查询门票 。 看看这个:
var express = require('express');var morgan = require('morgan');var http = require('http');var mongo = require('mongodb').MongoClient;var winston = require('winston');// Loggingwinston.emitErrs = true;var logger = new winston.Logger({ transports: [ new winston.transports.Console({ timestamp: true, level: 'debug', handleExceptions: true, json: false, colorize: true }) ], exitOnError: false});logger.stream = { write: function(message, encoding){ logger.debug(message.replace(/\n$/, '')); }};// Express and middlewaresvar app = express();app.use( //Log requests morgan(':method :url :status :response-time ms - :res[content-length]', { stream: logger.stream }));var db;if(process.env.MONGO_URL) { mongo.connect(process.env.MONGO_URL, null, function(err, db_) { if(err) { logger.error(err); } else { db = db_; } });}app.use(function(req, res, next) {if(!db) { //Database not connected mongo.connect(process.env.MONGO_URL, null, function(err, db_) { if(err) { logger.error(err); res.sendStatus(500);} else { db = db_; next(); } }); } else { next(); } });// Actual queryapp.get('/tickets', function(req, res, next) { var collection = db.collection('tickets'); collection.find().toArray(function(err, result) { if(err) { logger.error(err); res.sendStatus(500); return; } res.json(result); }); });// Standalone server setupvar port = process.env.PORT || 3001;http.createServer(app).listen(port, function (err) { if (err) { logger.error(err); } else { logger.info('Listening on http://localhost:' + port); }});
- 只有一件事:我们的微服务的唯一问题是查询完整的门票清单 。 而已 。 身份验证 , CORS和其他问题将由我们架构中的上层处理 。
- 记录:我们使用'winston'库保持记录 。 现在我们只需登录到控制台 , 但在以后的版本中 , 我们会将预定义格式的日志推送到集中位置进行分析 。
- 没有依赖:我们的微服务与其他微服务没有依赖关系 。
- 轻松扩展:没有依赖关系 , 单独的流程 , 只需一个操作 , 我们的微服务就可以轻松扩展 。
- 小巧可读:我们的微服务小巧可读 。 新开发人员可以立即修改或重写它 。
- 数据共享:现在我们的微服务从自己的数据库中读取数据 。 我们将在以后的帖子中探讨当其他微服务需要更新或创建票证时会发生什么 。
- 注册和失败:我们的微服务独立存在 。 在以后的文章中 , 我们将探讨如何管理服务发现以及在微服务失败的情况下您可以做些什么 。
旁白:对微服务感兴趣?你会喜欢webtasks!微服务是Auth0堆栈的重要组成部分 , 我们提出了一种使它更容易使用的好方法 。 查看webtask.io 。
- 轻量且简单的开发工作流程 。
- 简化部署 。
- 强大的安全模型 , 方便HTML5和移动应用程序 。
- 适用于HTML和数据API的Web友好编程模型 。
npm install wt-cli -g
# This will send an activation link to your email. One time only.
wt init your.name@email.com
# This will return a new endpoint for your webtask
wt create
# Use the endpoint here (we have setup a sample DB for this example)
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J2T942020.html
标题:数据格式|[微服务架构 】微服务简介,第1部分( 二 )