在 Node JS 中实现微服务架构

news2025/1/19 20:16:30

📍简介

🙂 正如我们在之前的博客“单体与微服务:一种实用方法”中讨论的那样。但是今天我们要在 NodeJS 中实现微服务架构。

👉 您可以使用任何技术,如 Spring、Python 等。但我们将使用 NodeJS 进行演示。

📍目录结构

🙂 您可以在此处找到GitHub Repo(请在运行前在 Order、Payment 和 API-Gateway 目录中运行 npm install)。我们有两个服务 Order 和 Payment with API Gateway。

NodeJS_微服务

|

---> 订购

|

------> server.js(在端口 8081 上运行)

|

---> 付款

|

------> server.js(在端口 8082 上运行)

|

---> API 网关

|

------> server.js(在端口 9091 上运行)

🔥 我们的服务结构如下所示:-

📍实施

🙂 每当客户端向 API 网关发出请求时,我们都定义了一些路由(使用前缀)将请求重定向到适当的服务(取决于调用的路由)。支付和订单服务是独立的,意味着如果一个失败,其他不会受到影响。

🔥 我们还可以添加 Auth 或 Middlewares,这样任何人都可以直接调用服务或不使用 Authentication。我们已经实现了一个非常基本的架构。

  • 订单服务器.js

const express = require("express");
const app = express();

const port = 8081;
app.get("/order-list", (req,res)=>{
    let response = {
        data: {
            item: [
                {
                    id: 1,
                    name: 'order-1'
                },
                {
                    id: 2,
                    name: 'order-2'
                }
            ]
        }
    };
    res.status(200).json(response);
});
app.get("/", (req,res)=>{
    res.send("Order called");
});

app.listen(port, ()=>{
    console.log("Listening at localhost "+ port);    
})
  • 支付服务器.js

const express = require("express");
const app = express();

const port = 8082;
app.get("/payment-list", (req,res)=>{
    let response = {
        data: {
            item: [
                {
                    id: 1,
                    name: 'Payment-1'
                },
                {
                    id: 2,
                    name: 'Payment-2'
                }
            ]
        }
    };
    res.status(200).json(response);
});

app.get("/", (req,res)=>{
    res.send("Payment called");
});

app.listen(port, ()=>{
    console.log("Listening at localhost "+ port);    
})
  • API网关

const gateway = require("fast-gateway");

const port = 9001;
const server = gateway({
    routes: [
        {
            prefix: "/order",
            target: "http://localhost:8081/",
            hooks: {}
        },
        {
            prefix: "/payment",
            target: "http://localhost:8082/",
            hooks: {}
        }
    ]
});

server.get('/mytesting', (req,res)=> {
    res.send("Gateway Called");
})

server.start(port).then(server=>{
    console.log("Gateway is running "+port);
})

😌 现在,我们可以启动包括网关在内的服务了

📍 而我们可以请求http://localhost:9001/orderhttp://localhost:9001/payment


🙋 关注更深入的教程。现在,我的目标是初学者,但很快我们将讨论更高级的东西。

将你的观点放在评论中。希望能帮助到你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL下载、安装和配置使用

1)下载 PostgreSQL官网下载:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 2)安装 双击运行安装包 选择安装目录,不推荐安装在C盘。 选择需要安装的服务,不明白是啥的全选就行&#xf…

内含JAVA简单概括和JAVA所需安装的软件和详细教程,想学习JAVA无从下手,这篇文章带你迈出第一步

本文大致概括了JAVA编程语言的简史和特点,主要介绍了JAVA开发环境安装,涉及JDK,Sublime Text IntelliJ IDEA三个软件的简单介绍,安装和使用,最后编写了第一个JAVA代码,保姆级教学,跟着文章一步步来,迈出你学习JAVA的第一步吧! 初识JAVA一.JAVA语言简介二.JAVA发展简史三.JAVA语…

通过模拟器实现APP抓包

本教程将跳过工具安装部分,请正确食用😉我的环境:操作系统:win11模拟器版本:雷电安卓模拟器稳定版-安卓7.1(32位) V5.0.46抓包工具:Wireshark-Version 4.0.1抓包工具:charles-Version 4.6.3工具…

SpringMVC(十一):SpringMVC文件上传中要解决的问题

文章目录 SpringMVC文件上传中要解决的问题 一、中文文件名编码问题 二、文件位置存储问题

【YOLO系列】YOLOv8算法(尖端SOTA模型)

前言回顾 在这里粗略回顾一下YOLOv5,这里直接提供YOLOv5的整理的结构图吧 Backbone:CSPDarkNet结构,主要结构思想的体现在C3模块,这里也是梯度分流的主要思想所在的地方;PAN-FPN:双流的FPN,必…

Linux——常用命令1.

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;linux &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;Linux常用命令 目录 …

Centos7安装JDK1.8(OracleJDK8)

Linux安装JDK1.8 | OracleJDK8Linux安装JDK1.8(OracleJDK8)卸载openJDK官网下载OracleJDK8解压JDK到指定目录配置JDK变量查看jdk是否可用Linux安装JDK1.8(OracleJDK8) Hadoop官方的JDK要求https://cwiki.apache.org/confluence/display/HADOOP/HadoopJavaVersions JDK变量配置…

Java——》下载Hotspot 虚拟机源码

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Java——》下载Hotspot 虚拟机源码一、官网下载压…

信息系统基础

目录 一、信息化概述 1.信息的定义 2.信息的特点 3.信息化的概念 4.信息对经济社会的意义 5.信息化对组织的意义 二、信息系统工程的总体规划 1.信息系统工程总体规划方法论 2.信息系统的生命周期和各阶段的目标 三.政府信息化与电子政务 1.电子政务的组成 2.电子政务…

mysql的binlog学习记录

文章目录什么是binlogbinlog格式StatementRowMixedbinlog使用什么是binlog MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件。简单的来说&#xff0c;binlog日志用于记录所有更新了数据或者以及潜在更新了数据&#xff08;例如&#xff0c;没有匹…

在线学习(online learning)——Chapter 1 What is online learning

在线学习(online learning)——Chapter 1 What is online learning 引用 [1]Hoi S C H, Sahoo D, Lu J, et al. Online learning: A comprehensive survey[J]. Neurocomputing, 2021, 459: 249-289.点击阅读 [2]Orabona F. A modern introduction to online learning[J]. ar…

【1分钟了解网络交换机的6种命令配置模式】

我们在配置交换机的时候首先要了解的就是交换机命令模式&#xff0c;小编用Cisco思科交换机为例带大家了解交换机的6种配置模式。 Cisco IOS提供了用户EXEC模式和特权EXEC模式两种基本的命令执行级别&#xff0c;同时还提供了全局配置、接口配置、Line配置和vlan数据库配置等多…

linux篇【13】:网络应用层—网络版计算器,序列化

目录 一.应用层 1.再谈 "协议" 2.序列化&#xff0c;反序列化 &#xff08;1&#xff09;序列化&#xff0c;反序列化的实例&#xff1a; &#xff08;2&#xff09;自描述长度的协议 3.网络版计算器 细节&#xff08;1&#xff09;&#xff1a;报头方案 &am…

2.13Epd 中景园2.13寸电子墨水屏 显示原理(局部刷新指令)

显示有两种模式&#xff1a; 1、MCU RAM 操作之后一起写入显示屏的RAM 在MCU上分配一个成员大小为8位的数组 长度是像素点数的1/8(一位控制一个像素点) 如图&#xff1a;数组是Image_BW 之后是用 显示的操作算法将每个点由对应的数字或字母 汉字的字模写入数组中 最后将数组一起…

如何尽早发现潜在开发风险,降低项目风险?

1、提前规划风险预防和控制策略 针对开发流程中各环节可能存在的风险&#xff0c;项目经理需进行科学的项目风险分析&#xff0c;提前进行科学地规划和部署&#xff0c;制定符合项目特点的风险评估和监督机制&#xff0c;实行岗位负责制&#xff0c;提前制定控制策略&#xff0…

mac配置MySQL环境

对于开发人员来说&#xff0c;只需要安装MySQL Server 和 MySQL Workbench这两个软件&#xff0c;这样就可以满足开发需求 MySQL Server&#xff1a;专门用来提供数据存储和服务的软件 MySQL Workbench:&#xff1a;可视化的MySQL管理工具&#xff0c;通过他&#xff0c;可以方…

ArcGIS中栅格计算器常用函数的使用

先看下目录 一、 ArcGlS中栅格计算器简介 栅格计算器位置及界面布局 二、 ArcGIS棚格计算器中Con&#xff08;&#xff09;函数的使用 &#xff08;一&#xff09; Con&#xff08;&#xff09;函数的用法 &#xff08;二&#xff09; ArcGIS 案例操作 三、 ArcGIS栅格计算…

Linux 上面安装 RocektMQ 安装

下载 RocketMQ 我下载的版本是&#xff1a;4.9.3 下载地址 Apache Downloads 环境说明 Linux64 位系统JDK1.8 (64位) 安装步骤 第一步&#xff1a;传入文件到 Linux 服务器 先将下载好的包传到 linux 服务器上面去 这里我传入的路径是在 /usr/local 第二步&#xff1a…

【Pan-sharpening:主要是调节参数】

Pan-sharpening based on multi-objective decision for multi-band remote sensing images &#xff08;Pan-sharpening基于多目标决策的多波段遥感图像&#xff09; Pan-sharpening细节注射适用于融合多光谱图像(MS)与其相应的全色(PAN)图像产生合成图像。理论上&#xff0c…

怎么图片压缩?这几个压缩小技巧值得一试

我们在朋友圈或者其它的社交平台上&#xff0c;发布一些照片或者图片的时候&#xff0c;经常会遇到由于图片过大而无法发送的情况&#xff0c;这时候&#xff0c;我们只需要将图片进行压缩就可以解决这个问题了&#xff0c;那么你们知道图片如何压缩大小吗&#xff1f;下面我整…