目录

序言                                                                                        

一、node.js入门
1.1 下载并安装
1.2 从helloworld到一个web应用
1.3 Express框架
二、node.js搭建网关
三、node.js集群搭建
 

序言

首先一个问题。我们用网关做什么?

假如说,微服务部署在不同的ip不同的端口,前端调用的时候就必须知道后端的部署位置,那么能不能说我们前端不知道后端的细节,统一去调用服务?所以这就是我们需要的api网关。

而且事实上,服务网关的路由这个过程我们叫反向代理,说白了就是请求不会直接到目的地有个家伙过来转发,一般这家伙是nginx或者node

其次,反向代理有nginx等,我这里用node.js,为什么我这里用node.js?因为node.js性能不亚于nginx,扩展性远远高于nginx,我们可以动态地制定被代理的目标地址,但是nginx配置的目标地址是静态的,而这个对于服务的发现很重要!

一、node.js入门

1.1 下载并安装

https://nodejs.org/en/download/

下个windows64位的一般就ok了。然后无脑安装。

用node --version 可以看到版本就安装正确了,注意哦,是  --version,有两个“-”号不是-version

如果没有出现的话把安装路径放到环境变量Path后面就可以了。

1.2 从helloworld到一个web应用

a.helloworld

新建一个helloworld.js然后敲代码。

node命令一跑完事,和java py什么的差不多。

node还有交互式的解释器REPL,有点像在linux敲python命令(退出用两次ctrl+c)

输入node进入解释器REPL,打我们刚才的代码

啊列怎么出了个undefined。。不过是正常的耶,继续。待会再问度娘。

b.node.js的web应用

我们改一下刚刚的应用

//console.log("hello world")
//node.js内置的require函数引入http模块
var http = require('http');
var port = ;
//创建app对象,毁掉函数包含req请求参数以及res响应参数
var app = http.createServer(function (req,res){
res.writeHead(,{'Content-Type':'text/html'});
res.write("<p>Hello</p>");
//必须用end函数才能结束http请求与响应的过程
res.end();
});
//用于启动
app.listen(port,function(){
console.log("应用已运行于"+port+"端口")}
)

在使用vue开发的时候,npm run start,一改代码马上就生效,node为了保证高性能,启动服务时候把代码加入到了内存。影响到开发阶段的效率但提高了运行阶段的效率。为了在修改源文件的时候node.js自动加载,我们使用Supervisor。顺带一提,node.js安装的时候npm顺便安装了/

npm install supervisor -g

以后用supervisor xx.js命令启动就可以随时更新源代码调试了。上面-g参数为全局安装,表示可以通过命令行运行该程序。现在我们跑一跑这个程序。改一下代码刷新页面很快就会变化。

现在我们处理一下请求。,建多一个index.html;

修改一下刚刚的程序

//console.log("hello world")
//node.js内置的require函数引入http模块
var http = require('http');
//引入内置的fs模块,这样才能读取文件
var fs = require('fs')
var _dirname = "index.html"
var port = ;
//创建app对象
var app = http.createServer(function (req,res){
var path = _dirname + req.url;
fs.readFile(path,function(err,data){
if(err){
console.log('error')
res.end();
return;
}
res.write(data.toString());
res.end();
});
});
app.listen(port,function(){
console.log("应用已运行于"+port+"端口")}
)

访问一下就有了。

C.Express框架的应用

上面那个程序的话还不能很好处理图片啊css啊js这些静态资源,用Express这个框架搞一搞。

首先下载

npm install express

代码

//require函数加载express对象
var express = require('express');
var PORT = ;
//创建app对象
var app = express();
//app对象的use函数加载static中间件,处理所有静态资源,"."表示当前路径
app.use(express.static('.'));
//express对象的启动也是listen函数
app.listen(PORT,function(){
console.log('server is runnning at',PORT)
})

一访问就有

而express对错误处理也比较好。

接下来我们使用express的路由功能,在代码末尾加上这段,输入/hello就可以访问到hello页面。

app.get('/hello',function(req,res){
res.send('hello......')
})

二、node.js搭建网关

首先我们使用如下命令安装HTTPProxy模块

npm install http-proxy

新建一个proxy.js

var http = require('http');
var httpProxy = require('http-proxy')
var PORT = ; var proxy = httpProxy.createProxyServer();
proxy.on('error',function (err, req, res){
res.end();
}) var app = http.createServer(function (req, res){
//执行反向代理
proxy.web(req, res, {
target:'http://localhost:1234'}
);
}); app.listen(PORT, function(){
console.log('server is running at ',PORT)
})

一起启动

测试一下,被代理的明明白白的。

ok,有关微服务网关的部分基本到这里了

微服务-网关-node.js by 大雄daysn的更多相关文章

  1. 微服务-开发框架之springboot by 大雄daysn

    目录 一.关于springboot 二.springboot的实践 2.1发布一个rest的api 2.2端点 2.3健康检查 2.4远程监控 一.关于springboot 由来:spring1.0- ...

  2. 使用 Node.js 搭建微服务网关

    目录 Node.js 是什么 安装 node.js Node.js 入门 Node.js 应用场景 npm 镜像 使用 Node.js 搭建微服务网关 什么是微服务架构 使用 Node.js 实现反向 ...

  3. 8. 使用Zuul构建微服务网关

                    使用Zuul构建微服务网关 8.1. 为什么要使用微服务网关 8.2. Zuul简介 8.3. 编写Zuul微服务网关 8.4. Zuul的路由端点 8.5. Zuul ...

  4. 王院生:Apache APISIX 微服务网关极致性能架构解析

    2019 年 10 月 27 日,又拍云联合 Apache APISIX 社区举办 API 网关与高性能服务最佳实践丨Open Talk 杭州站活动,Apache APISIX PPMC 成员王院生做 ...

  5. 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

    微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...

  6. Bumblebee微服务网关的部署和扩展

    Bumblebee是.netcore下开源基于BeetleX.FastHttpApi扩展的HTTP微服务网关组件,它的主要作用是针对WebAPI集群服务作一个集中的转发和管理:作为应用网关它提供了应用 ...

  7. springcloud使用Zuul构建微服务网关入门

    为什么要使用微服务网关 不同的微服务一般会经过不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求. 如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会多次请求不同的微 ...

  8. 解决微服务网关Ocelot使用AddStoreOcelotConfigurationInConsul后请求404问题

    一个小插曲,最近研究 netcore 微服务网关,在使用AddStoreOcelotConfigurationInConsul将配置存到consul后,任何经过网关的请求都出现404,并且没有任何有用 ...

  9. springcloud(十)-Zuul微服务网关

    为什么要使用微服务网关 前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服 ...

随机推荐

  1. 在服务器上搭建node环境

    一般公司的发布是后台人员完成的,但是作为开发不会发布项目还是有点不高级的感觉 因为没有搭建虚拟机于是就直接在我阿里云的服务器上搭建了node环境, 第一步,前往node官网下载linux下的阿里云的镜 ...

  2. linux----------阿里云服务器使用过程中遇到的各种问题以及解决渠道

    1.Windows Server 2012 R2 或 2016 无法安装 .NET Framework 3.5.1:  https://help.aliyun.com/knowledge_detail ...

  3. IO流的总结(二)

    缓冲字节流: 我们先说一下缓存区的概念: 缓冲区就好比一辆车,一车一车的把数据拉走,这样就效率快多了 按照流的方向分类: 写入数据到流中,字节缓冲输出流 BufferedOutputStream 读取 ...

  4. java Timer 定时每天凌晨0点执行任务

    import java.util.TimerTask; /** * 执行内容 * @author admin_Hzw * */ public class Task extends TimerTask ...

  5. Python记录10:模块

    ''' 1. 什么是模块     模块就一系列功能的集合体 模块有三种来源:         1. 内置的模块         2. 第三方的模块:pip install +模块名称         ...

  6. matlab之中文字体乱码处理

  7. excel 八位二进制转换为十六进制公式

    =BIN2HEX(C16&D16&E16&F16&G16&H16&I16&J16,2)

  8. Delphi7使用一段时间后抽风提示注册

    今天在单位用电脑接自己的移动硬盘,一打开资源管理器就卡死,删除硬盘总是提示用程序在使用,反复试了几次,老样子.很是窝火.干脆直接关机电脑,桌面上还有开着的Delphi编译器,重新开机!开机后一打开编译 ...

  9. git help 机器翻译

    该篇发布仅为博主个人保存并参考,内容可能不对 usage: git [--version] [--help] [-C <path>] [-c <name>=<value& ...

  10. tiny6410 uboot启动参数的问题

    使用uboot来启动tiny6410,需要在启动参数中加入lcd=S70,才能在lcd上显示正确的画面