模块化概念 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、可分解和可更换的单元。 在模块化时,要遵守固定的规则(模块化规范),把一个大文件拆成独立并互相依赖的多个小模块。 进行模块化拆分的好处: 提高了代码的复用性。 提高了代码的可维护性。 可以实现按需加载。 遵守同样的模块化规范,有利于降低沟通的成本,极大地方便了各个模块之间的相互调用,利人利己。 Node.js 模块化 Node.js中根据模块来源的不同,将模块分为了3大类,分别是: 内置模块:由Node.js官方提供,例如fs、path、http等。 自定义模块:用户自定义的模块。在Node.js中,用户创建的每个...

http模块是Node.js官方提供的、用于创建Web服务器的模块。通过http模块提供的http.createServer()方法,就能像Web服务器一样对外提供Web资源服务。 在Node.js中无需使用第三方Web服务器软件,通过http模块就能模拟服务器软件,从而对外提供Web服务。 http模块主要用于搭建HTTP服务端和客户端,使用HTTP服务器或客户端功能必须调用http模块。在Node.js中使用Web服务的基本步骤如下: 导入http模块: 1const http = require('http') 创建Web服务器实例。 1const server = http.createServer() 为服务器实例绑定...

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。 Node.js 几乎每一个 API 都是支持回调函数的。 Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者时退出。每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。 事件驱动程序 Node.js 使用事件驱动模型。在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数: 这套流程有点类似于观察者模式,事件相当于一个主题(Subject),而所有注册到这个事件上的...

使用fs模块,首先需要导入: 1const fs = require('fs') 读取文件 下方是一个通过fs.readFile()读取文件的示例: 1// 1. 导入fs模块,来操作文件 2const fs = require('fs') 3/** 4 * 2. 调用 fs.readFile() 方法读取文件 5 * - 参数1(必须):读取文件的存放路径 6 * - 参数2(可选):读取文件时采用的编码格式,默认指定utf8 7 * - 参数3(必须):回调函数,拿到读取失败(err)和成功的结果(dataStr) 8 */ 9fs.readFile('test.txt', 'utf-8', (err, dataStr) =>...

Node.js是一个基于Chrome V8引擎的JavaScript运行环境。 浏览器可以当作是JavaScript的前端运行环境;Node.js可以看作是JavaScript的后端运行环境。但是在Node.js中无法调用DOM和BOM等浏览器内置API。 Node.js的安装这里就不介绍了,推荐使用NVM来管理Node.js:NVM安装。 查看Node.js的版本: 1node -v 升级npm: 1sudo npm install npm -g NPM NPM(Node Package Manager)是 Node.js 的包管理工具,用于在 Node.js 环境中安装、管理和共享代码模块。NPM 是随同 Node.js 一起安...

AMQP(Advanced Message Queuing Protocol)是用于在应用程序之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。 RabbitMQ实现了AMQP协议。Spring AMQP是基于AMQP协议定义的一套API规范,提供了模板来发送和接收消息。包含两部分,其中spring-amqp是基础抽象,spring-rabbit是底层的默认实现。 Spring AMQP的依赖如下,其中包含了RabbitMQ的依赖: 1<!-- AMQP依赖,包含RabbitMQ --> 2<dependency> 3...

RabbitMQ官网:https://www.rabbitmq.com/。 官方文档:https://rabbitmq.com/documentation.html。 官方Demo:https://www.rabbitmq.com/getstarted.html。 部署 RabbitMQ 使用Docker来部署RabbitMQ只需要两个步骤: pull RabbitMQ镜像: 1docker pull rabbitmq:3-management RabbitMQ通过插件的方式提供了一个可视化界面。在RabbitMQ官方的镜像中,带management版本的就是集成了该可视化插件的镜像。 通过Docker官方的镜像源来pull...

微服务间通讯有两种方式: 同步通讯:实时响应。 异步通讯:不需要马上回复。 两种方式各有优劣,同步通讯可以立即得到响应,但是却不能跟多个服务同时通讯。异步通讯可以同时与多个服务通讯,但是往往响应会有所延迟。 同步通讯 Feign调用就属于同步方式,虽然调用可以实时得到结果,但存在下面的问题: 耦合度高:消费者与提供者之间存在直接的调用关系。在服务中每次加入新的需求,都要修改原来的代码。 性能下降:消费者需要等待提供者响应,如果调用链过长,响应时间等于每次调用的时间之和。 资源浪费:消费者在等待响应过程中,不能释放请求占用的资源,高并发场景下会极度浪费系统资源。 级联失败:如果提供者出现问题,所有消费者都会跟着出问题。如同多米话骨牌一...

介绍 Docker Compose是一个文本文件,用于定义和运行多容器 Docker应用程序的工具。通过Compose,可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 Compose使用的三个步骤: 使用Dockerfile定义应用程序的环境。 使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 最后,执行docker-compose up命令来启动并运行整个应用程序。 docker-compose.yml的配置案例如下: 1version: "3.8" 2 services: 3 mysql: 4 image:...

常见的镜像在Docker Hub就能找到,但是要部署自己的服务可能需要自己构建镜像。构建镜像可以使用Dockerfile。Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 以MySQL镜像的组成结构为例: 镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。构建镜像,其实就是实现上述打包的过程。 语法 构建自定义的镜像时,并不需要一个个文件去拷贝,打包。我们只需要告诉Docker,镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要...