Node.js微服务 2 :基于Seneca和PM2构建Node.js微服务

python电子学会三级的零碎笔记 ‌示例‌:如果s = ['a', 'b', 'c'],则' '.join(s)+'\n'的结果是'a b c\n',写入文件时所有元素会在一行内显示,每个元素之间用空格分隔,末尾有一个换行符。(2) '\n'.join(s)‌:如果s = ['a', 'b', 'c'],则'\n'.join(s)的结果是'a\nb\nc',写入文件时每个元素会占据文件的一行。(1) ' '.join(s)+'\n'‌:这种方式首先将列表s中的每个元素通过空格连接成一个字符串,然后在字符串末尾添加一个换行符\n。 阅读详情
2.1 选择Node.js的理由

    如今,Node.js已经成为国际上许多科技公司的首选方案。特别的,对于在服务器端需要非阻塞特性(例如Web Sockets)的场景,Node.js俨然成了最好的选择。

    安装Node.js, npm, Seneca和PM2:

    Node.js的线程模型:

    SOLID设计原则:模块化归结于以下设计原则,单一职责原则、开放封闭原则、里氏替换原则、接口分离原则、依赖倒置原则。

    在Node.js中,每个JavaScript文件默认是一个模块。当然,也可以使用文件夹的形式组织模块。

    在Node.js中使用全局变量是个让人头痛的事前。使用全局变量会将各个模块耦合在一起,但是过度耦合是我们无论如何都要避免的。

function init(options) {
	function charToNumber(char) {
		return char.charCodeAt(0) - 96;
	}
	function StringManipulation() {

	}
}
module.exports = init;
2.2 微服务框架Seneca

    Seneca是一个用于构建微服务的框架。它使用完备的模式匹配接口来连接各个服务,从代码中将数据传输抽象出来,使编写具有高可扩展性的软件变得相当容易。

var seneca = require('seneca')()

seneca.add({role:'math', cmd:'sum'}, function (msg, respond) {
	var sum = msg.left + msg.right;
	respond(null, {answer: sum});
})
seneca.add({role:'math', cmd:'product'}, function (msg, respond) {
	var product = msg.left * msg.right;
	respond(null, {answer: product});
})
seneca.act({role:'math', cmd:'sum', left:1, right:2}, 
	function(err, data) {
	if (err) {
		return console.error(err);
	}
	console.log(data);
});
seneca.act({role:'math', cmd:'product', left:3, right:4}, console.log);
    实现控制反转:一种软件思想,它能代理创建或调用各组件及方法,使得模块本身不用关注创建它们所需要的依赖,这些通常是通过依赖注入完成的。

    Seneca的模式匹配: 统计单词数的例子

var seneca = require('seneca')()

seneca.add({cmd:'wordcount'}, function (msg, respond) {
	var length = msg.phrase.split(' ').length;
	respond(null, {words: length});
})
seneca.add({cmd:'wordcount', skipShort: true}, function (msg, respond) {
	var words = msg.phrase.split(' ');
	var validWords = 0;
	for (var i=0; i<words.length; i++) {
		if (words[i].length > 3) {
			validWords++;
		}
	}
	respond(null, {words: validWords});
})
//处理器1
seneca.act({cmd:'wordcount', phrase: 'Hello world this is Seneca'}, 
	function(err, response) {
	console.log(response);
});
//处理器2
seneca.act({cmd:'wordcount', skipShort: true, phrase: 'Hello world this is Seneca'}, 
	function(err, response) {
	console.log(response);
});
    模式匹配库Patrun:Seneca使用它来执行模式匹配,获取最长匹配项和模式中元素的顺序

{ x:1,     } -> A
{ x:1, y:1 } -> B
{ x:1, y:2 } -> C
    复用模式:
    编写插件:通用的功能可以被模块化并抽象成可复用的组件。
function minimal_plugin( options ) {
	console.log(options);
}
require( 'seneca' )()
  .use( minimal_plugin, {foo: 'bar'})
    整合Web服务器:Seneca默认通过TCP传输层进行信息交互。

    讨论一个更普遍的用例:服务的调用方是浏览器中的JavaScript。虽然通过普通JSON会话就能满足需求,但是如果Seneca提供REST API来代替它会更简单。这对于微服务之间的通信来说是完美的选择,除非你要求极低的延迟。

    Seneca并不是一个Web框架。它被定义为一个通用的微服务框架,因此它并不会对具体的某个应用场景做过多的支持。取而代之的是,Seneca能够非常轻易地与其他框架进行整合。

    Express是基于Node.js构建Web应用的首选。

    将Seneca作为Express的中间件:Express也是基于API聚合原则构建的。在Express中,每个软件模块都被称为中间件,它们在代码中以链式结构串联,以此来处理每个请求。

var seneca = require('seneca')();
seneca.add('role:api, cmd:bazinga', function(args, done) {
	done(null, {bar:"Bazinga!"});
});
seneca.act('role:web', {use:{
	prefix: '/my-api',
	pin: {role:'api', cmd:'*'},
	map: {
		bazinga: {GET: true}
	}
}});
var express = require('express');
var app = express();
app.use( seneca.export('web') );
app.listen(3000);
    数据存储:Seneca具有数据抽象层,允许我们使用通用的方式操作应用的数据。默认加载in-memory存储插件。

    PM2

2.3 PM2---Node.js的任务执行器
    PM2是一款可以为服务器实例带来负载均衡功能的生产级别的进程管理器,通过PM2可以自由伸缩Node.js应用。此外,它能确保进程持续运行,解决Node.js单线程模型带来的副作用:一个没有被捕获的异常通过杀死线程,进而杀死整个应用。
    单线程应用及异常:单线程模式意味着,如果抛出的异常没有被处理的话,应用程序将会挂掉。
    这个问题可以通过使用promise库(例如bluebird)解决;通过promise方式,应用不仅可以处理成功的返回,还能够处理异常,因此它可以防止异常“冒泡”导致应用崩溃。
    然而,还是存在一些在我们控制范围之外的情况,称之为不可恢复的错误。一旦出现,最终将导致你的应用程序崩溃。在Java中不是大问题,但Node.js中却是一个大问题。但是,通过任务执行器,例如forever来解决这个问题。
    forever与PM2都是任务执行器,当应用意外退出时,它们可以重启应用,从而能保证其正常运行。
    相当有用的工具包nodemon:当它探测到监控的文件发生变化时,它将重载应用。
    PM2---业界标准的任务执行器
    PM2比forever更胜一筹。可以管理应用的整个生命周期,并且实现没有停机时间,也具备负载均衡的功能。
hello.js
var http = require('http');
var server = http.createServer(function(request, response) {
	console.log('called');
	response.writeHead(200, {"Content-Type": "text/plain"});
	response.end("Hello World\n");
});
server.listen(8000);
console.log("Server running at http://127.0.0.1:8000/");
   $ pm2 start hello.js
   $ pm2 show 0   #得到id为0的应用的相关信息
   $ pm2 monit     #监控
   $ pm2 logs       #查看输出日志
   只需要很少的命令,就能够覆盖90%的监控需求
   $ pm2 reload all    #轻易地无缝重启应用
   $ pm2 stop all
   $ pm2 delete all
   $ pm2 start hello.js -i 3
   PM2将启动一个控制进程和指定个数的工作进程。因此,单线程模型的Node.js也能享受到多核CPU带来的性能提升。
   $ pm2 scale hello 2    # 工作进程有3个减少为2个
   我们能够毫不费力地配置应用,以做好生产准备。

使用GBIF获取生物多样性数据与GIS的结合 随着全球生物多样性的重要性日益凸显,越来越多的研究人员和保护机构开始利用地理信息系统(GIS)来分析和可视化生物多样性数据。GBIF(全球生物多样性信息设施)作为一个全球性的生物多样性数据库,提供了大量的物种分布和分类信息,为研究人员和保护工作者提供了宝贵的数据资源。本文将介绍如何使用GBIF API获取生物多样性数据,并将其与GIS技术相结合,以便更好地理解和研究生物多样性。利用GIS的强大功能,我们可以在地理空间上可视化物种分布、分析物种多样性的空间格局,并为保护生物多样性提供科学依据。 阅读详情

相关推荐

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1211

在 Node JS 中实现微服务架构

🙂正如我们在之前的博客“单体与微服务:一种实用方法”中讨论的那样。但是今天我们要在 NodeJS 中实现微服务架构。👉您可以使用任何技术,如 Spring、Python 等。但我们将使用 NodeJS 进行演示。📍。

u010291330的博客 2724

别再死记硬背MAML原理了!用PyTorch手撸一个Omniglot小样本分类器(附完整代码)

本文详细介绍了如何使用PyTorch实现MAML(模型无关的元学习)算法,构建一个Omniglot小样本分类器。通过实战代码演示,帮助读者理解MAML的双层优化原理,并提供了完整的训练循环、网络架构设计及调试技巧,适合想要掌握元学习技术的开发者。

weixin_29191669的博客 131

nodejs微服务:RPC与GRPC框架

后面自己要写的时候,可以将上述客户端和服务端,以及proto文件拷贝出去,写自己的业务需求。上述服务端和客户端中均引入了 helloworld.proto 这个文件有特定的书写语法。在上述 dynamic_codegen 目录中的代码就是微服务的代码。还有两个工具: grpc、protoLoader。有上述服务端代码中,我们看到有几个必要的步骤。客户端代码中,注意事项同上并参考注释。2.1 先启动服务端。2.2 后启动客户端。

Wang的专栏 3027

【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码

transformer原理

qq_38253797的博客 2万+

为什么大语言模型推理要分成 Prefill 和 Decode?深入理解这两个阶段的真正意义

Prefill 阶段是语言模型推理中的第一个步骤,它负责处理你输入的所有上下文内容(prompt),为后续生成打下基础。“请解释一下 Transformer 的原理。这句话会被 tokenizer 编码为一串 token,比如["请", "解释", "一下", "Trans", "##former", "的", "原理", "。"]。然后这些 token 会进入 Transformer 模型进行前向传播。重点来了 👇。

Harry的博客 1万+

什么是微服务架构,Node.js如何支持微服务?

微服务架构(Microservices Architecture)是一种架构风格,它将单一应用程序分解为一组小的服务。每个服务运行在其自身的进程中,并通过轻量级的机制(通常是HTTP资源API)进行通信。这些服务围业务功能构建,并通过自动化部署机制独立部署。这种架构风格强调的是每个模块的独立性,以及这些独立模块之间合理的通信方式。通过微服务架构,我们可以将大型应用拆分为多个小型服务,方便维护和扩展。Node.js的阻塞I/O模型和丰富的生态系统使得它非常适合用于构建高性能的微服务架构。

有我更精彩的博客 1083

用示波器抓取同步Buck自举电容波形:从充电回路到SW节点振铃的完整分析

本文通过实测TI TPS54561和MPS MPQ4572同步Buck芯片,详细解析了自举电容在充电、维持和放电三个工作阶段的波形特征。重点揭示了电感泄放回路与充电回路重叠时,在SW节点引发的振铃现象及其产生机理,并提供了串联阻尼电阻等有效的工程抑制方法。文章结合示波器实测,为硬件工程师提供了从波形观测到问题调试的完整实践指南。

weixin_29276847的博客 373

其他内容:使用 Nodejs 构建微服务

微服务架构是组织软件服务的一种方式。它是一个小型的独立应用程序,可用于执行特定功能。许多服务结合在一起构成了一个大型应用程序。在Node.js中,可以使用各种 JavaScript 库构建微服务。在 Nodejs 中使用微服务有很多优势,例如高性能、可伸缩性和健壮性。微服务是一种应用程序架构。它是一种在分布式系统中布局 Web 服务的方法,可以按需扩展。为了更好地理解Node.js微服务,我们先讨论一下对微服务的需求。早在 1990 年代左右,提供互联网服务的公司会在内部服务器上运行大型单体应用程序。

新华编程特战队 1586

深入构建加密货币价格预测系统:从数据获取到模型优化的完整指南!

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1276

OPCUA二(通过OPCUA服务器访问CPU)

摘要:本文介绍了使用UaExpert软件连接西门子PLC的OPC UA配置方法,包括IP地址设置(默认端口4840)、安全认证和证书信任流程。详细说明了数据访问操作,如变量拖拽监控和属性解读(NodeId、Value、状态码等)。特别强调连接仿真Advance7时需先启动实例。最后预告下章将讲解通过KerServer访问CPU。文章涵盖配置步骤、常见问题处理及实用技巧,适合工业自动化开发者参考。

欢迎来到RaymondLeigh的知识共享基地 1340

Seneca:NodeJS 微服务框架入门(一)

Seneca是什么? (1)官网是这样介绍的: Seneca is a microservices toolkit for Node.js. It helps you write clean, organized code that you can scale and deploy at any time. 大概意思是:Seneca是一个库,在Node平台上开发微服务时用的,它能够帮助开发人员...

bob_baobao的博客 1万+

车规SoC深度对比:高通8397 vs 比亚迪D9000 vs 联发科CT-X1/MT8676/MT2715

芯片优势弱势最适合场景高通 8397低功耗、低延迟AI和音频处理单屏算力略低HUD + 音响座舱 + 低延迟交互D9000多屏渲染、Wi-Fi7高速通信AI算力中等高端多屏座舱 + 流媒体娱乐CT-X1极高AI算力、多模态渲染功耗较高高端沉浸式智能座舱 + 多摄像头感知MT8676算力均衡、座舱应用全面GPU稍弱全栈智能座舱、音视频多任务MT2715成本低、入门座舱可用算力低,低端显示入门智能座舱、基础信息娱乐。

weixin_43199439的博客 1769

node seneca_使用Node.js和Seneca编写国际象棋微服务,第1部分

node seneca(This is Part 1 of a three-part series [Part 2, Part 3]) (这是一个由三部分组成的系列文章的第1部分[ 第2 部分 , 第3部分 ]) I’ve begun wrapping my head around microservices. Up to this time I regarded it as a scalabi...

583

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

js word 预览_Node.js微服务实践(二)

基于Seneca 和 PM2构建本章主要分为三个小节:选择Nodejs的理由:将证明选择Node.js来构建的正确性。介绍使用Node.js时设计的软件栈。微服务架构Seneca:关于Seneca 的基本知识。PM2:PM2 是运行 Node.js 应用的最好选择。选着Node.js的理由如今,Node.js 已经成为国际上许多科技公司的首选方案。特别对于在服务器端需要费阻塞特性的场景,Node....

weixin_39585761的博客 445

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Node.js微服务实践(二)

作者 | 王澍基于Seneca 和 PM2构建本章主要分为三个小节:选择Nodejs的理由:将证明选择Node.js来构建的正确性。介绍使用Node.js时设计的软件栈。...

大转转FE 530

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Seneca-Mesh 使用教程

Seneca-Mesh 使用教程 项目介绍 Seneca-Mesh 是一个用于将 Seneca.js 微服务自动连接起来的插件。它通过使用 SWIM 八卦协议来实现服务发现,从而消除了传统服务发现机制的需要。Seneca-Mesh 使得微服务之间的通信更加简单和高效。 项目快速启动 安装 首先,确保你已经安装了 Node.js 和 npm。然后,通过以下命令安装 Seneca 和 Seneca-M...

gitblog_00355的博客 968

Node微服务之Seneca的使用

Seneca在Node微服务中的运用 1.seneca基本用法介绍 准备工作: npm i -S seneca npm i -S seneca-basic #匹配模式 /** demo.js **/ const seneca = require('seneca')() // 将下列函数cal作为插件使用 seneca.use(cal).act({ cmd: 'add' }, (err,data) => { // 匹配成功返回后执行 console.log(data) // { data: '

就是有点怕怕的博客 758

Seneca示例项目教程

Seneca示例项目教程 1、项目介绍 Seneca示例项目是一个展示如何使用Seneca框架的开源项目。Seneca是一个用于构建微服务和分布式应用的工具包,它提供了一种简单的方式来定义和组合服务。这个示例项目包含了多个代码示例,帮助开发者理解和实践Seneca框架的各种功能。 2、项目快速启动 环境准备 Node.js 安装 克隆项目仓库 git clone https://github.c...

gitblog_00793的博客 583

Seneca Examples 项目常见问题解决方案

Seneca Examples 项目常见问题解决方案 项目基础介绍 Seneca Examples 是一个基于 Node.js 的开源项目,旨在提供使用 Seneca.js 框架的示例代码。Seneca.js 是一个基于 Node.js 的工具集,用于快速构建可扩展的业务逻辑。该项目通过多个示例展示了如何使用 Seneca 模块创建插件、构建 REST 服务器、创建微服务系统等。 主要编程语言:J...

gitblog_00561的博客 703

nodejs微服务

nodejs微服务 为什么选择nodejs 学习门槛低 易于扩展 对测试友好 易于部署 npm依赖管理 有着大量与主流标准协议相集成的库 基于Seneca和PM2构建Node.js微服务 Seneca 一个用于构建微服务的框架,它使用完备的模式匹配接口来连接各个服务,从代码中将数据传输抽象出来,使得编写具有高可扩展性的软件变得x相当容易。 核心功能 模式匹配...

ja.rome 3702

跨平台桌面应用开发(一)

本书是一个实践指南,教你如何使用 Node.js 和最现代的框架,特别是 Seneca 和 PM2 来编写微服务。在各章中,我们将讨论如何设计、构建、测试和部署微服务,使用最佳实践。我们还将讨论一个宝贵的经验教训:如何在避免过度设计的同时做出正确的妥协,并使业务需求与技术解决方案保持一致。第一章,“微服务架构”,讨论了面向微服务的架构的利弊。这将是本书其余部分的基础。第二章,“Node.js 中的微服务- Seneca 和 PM2 替代方案”,介绍了 Node.js、Seneca 和 PM2。在其中,我们将

龙哥盟 540

Nodezoo 工作坊教程

Nodezoo 工作坊教程 1、项目介绍 Nodezoo 是一个用于搜索 Node.js 模块的搜索引擎。该项目是一个使用 Node.js 微服务构建的实际应用示例。每个微服务都在其自己的 GitHub 仓库中发布,并包含运行系统所需的所有配置,无论是本地还是实时环境。Nodezoo 旨在作为一个示例,帮助开发者理解和实践微服务架构。 2、项目快速启动 克隆项目 首先,克隆 Nodezoo 工作坊...

gitblog_00748的博客 795

Node 完全参考指南(七)

如你所见,编写服务在不同的框架之间变化不大。我们的代码非常相似,只有一些小的变化。Seneca 对消息格式和内容的要求更严格,所以我们使用base64对 JSON 消息中的图像进行编码。除此之外,一切照旧。你可以自由选择关于服务的一切,但你需要编写大量的代码。为了方便这项任务,Hydra 可能是一个好的起点,用于一组初始插件。对于其他工具,如 Seneca,微服务的某些方面(例如,使用 JSON 消息的通信和服务组合)已经打包。这需要以更严格的服务定义作为代价。

龙哥盟 905

Node.js微服务 1 : 微服务架构

2015年,随着以Docker为代表的容器技术的突飞猛进,微服务的部署难题得到解决,甚至有人将2015年称为微服务架构元年。     作为一本微服务入门的实践指南,本书采用了Node.js和以Seneca、PM2为主的现代框架来进行阐述。     代码http://www.broadview.com.cn/book/2484 1.1 微服务应运而生      通常,在一家公司随着业务需求的

Just for fun的专栏 5340

高大上的微服务可以很简单使用node写微服务 边黎安教你们 手把手 node 微服务架构

高大上的微服务可以很简单,使用node写微服务 安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id,便于跟踪一个请求在所有微服务上的日志 // 返回值如果是非null,则会把该值JSON.stringify后作为结果返回,若是pr...

qq_26233519的专栏 449
上一篇: Node.js微服务 1 : 微服务架构
下一篇: Node.js微服务 3 :从单块软件到微服务
CopperDong
博客等级 码龄14年 1205粉丝 466原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值