目录

序言                                                                                        

一、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. 关于mysql处理百万级以上的数据时如何提高其查询速度的方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  2. fiddler学习总结--利用fiddler快速模拟mock

    Mock的应用就是在测试接口的时候,去模拟我们想要的接口 1.创建一个txt文件,里面随意写一个json字符串,如图所示: 2.选择目标消息,并且点击“autoresponde”-->“add ...

  3. 在 CentOS7 上安装 Zookeeper服务

    1.创建 /usr/local/services/zookeeper 文件夹: mkdir -p /usr/local/services/zookeeper 2.进入到 /usr/local/serv ...

  4. OpenStack-Neutron-VPNaaS-配置

    配置openstack版本:Juno vpnaas配置的资料很少,官网目前参考的https://wiki.openstack.org/wiki/Neutron/VPNaaS/HowToInstall比 ...

  5. Select input 两个元素的宽度高度跟设定值不一致的问题

    在做登录框的时候,需要一个select 元素作为账号输入,一个input作为密码输入框.在css 文件中,将这两个元素的position 设置为relative ,并且width 设置为100%.刷新 ...

  6. Linux分区、文件系统

    Linux分区类型: ◆主分区:总共最多只能分四个 ◆扩展分区:只能有一个,也算作主分区的一种,也就是 说主分区不能存储数据和格式化,必须再划分为逻辑分区才能使用. ◆逻辑分区:逻辑分区是在扩展分区中 ...

  7. 20190402 管道符,分号,单引号,双引号,&&的使用

    :分号叫顺序执行 格式:命令:命令 && :前一条命令执行成功,后面命令继续执行:前面命令执行失败,后者不执行 格式:命令+空格&&空格+命令 || :两管道逻辑执行, ...

  8. c#高级编程第七版 学习笔记 第三章 对象和类型

    第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...

  9. Html fieldset、legend 标签

    Html fieldset.legend 标签 <html> <body> <!-- fieldset 添加圈起标题框标签 --> <fieldset> ...

  10. Python 进程池

    进程池: 每一个进程在启动一个子进程时都会克隆一分数据,并开启额外一份内存空间,如果多次开启子进程,对内存的开销比较大,这里可以通过进程池来控制进程的最大个数,来解决.   进程池中有两个方法: ap ...