【深入浅出 Node + React 的微服务项目】12. 多服务中的代码共享

本文介绍了在微服务架构下如何有效地共享代码逻辑,包括创建NPM组织来管理公共代码库,发布和更新模块,以及解决国内发布问题。通过使用TypeScript编译为JavaScript并发布到NPM,简化了不同服务间的代码复用,同时提供了更新和导入共享库的步骤。
摘要由CSDN通过智能技术生成

多服务中的代码共享

在各个服务中共享代码逻辑

  • 在 Step #7 和 Step #9 中,Auth 认证、request 相关的中间件 和 Error & Error handler
  • 这些不仅是 Auth 服务会用到,其他服务同样会用到,原因是微服务架构下的 Auth 认证我们选择了每个服务独立的,详见 Step #9
    在这里插入图片描述

⬆ back to top

代码共享能想到的 Options

Option #1 直接复制粘贴代码
在这里插入图片描述

Option #2 每个服务抽出成单个 single repo 在 git 上管理共享代码
在这里插入图片描述
Option #3 【将会使用】

  • 很多公司都是使用的 monorepo 来管理,因为单个 repo 管理实在是麻烦,因为会涉及到 git 的一些协同,特别是版本问题
  • 所以我们将 common code 直接发布到一个能方便版本号管理的 lib 里,git 上的代码直接通过版本号来管理就行了
    在这里插入图片描述

⬆ back to top

创建 NPM organization

  • Goto https://www.npmjs.com/
  • create public organization

⬆ back to top

Publishing NPM Modules

npm init -y
git init
git add .
git commit -m "initial commit"
npm login
npm publish --access public

⬆ back to top

TS 转 JS 设置

  • 公共库和我们的服务之间的 TS 设置可能存在差异 - 这种差异我们不想处理
  • 服务可能根本不是用 TS 编写的!
  • 所以我们的公共库将以 Typescript 编写并以 Javascript 发布
// tsconfig.json
    "declaration": true,                   /* Generates corresponding '.d.ts' file. */
cd ticketing/common
tsc --init

⬆ back to top

简单的 Publish 命令

git status
git add .
git commit -m "additional config"
npm version patch
npm run build
npm login
npm publish --access public
  • https://www.npmjs.com/package/@heysirius-common/common

⬆ back to top

删掉之前项目的相同 lib

  • 将 errors 和 middlewares 从 auth services 移动到 common npm module
// package.json
  "name": "@heysirius-common/common",
  "version": "1.0.3",
  "description": "",
  "main": "./build/index.js",
  "types": "./build/index.d.ts",
  "files": [
    "build/**/*"
  ],
  "scripts": {
    "clean": "del ./build/*",
    "build": "npm run clean && tsc",
    "pub": "git add . && git commit -m \"Updates\" && npm version patch && npm run build && npm publish --access public"
  },
npm i express express-validator cookie-session jsonwebtoken @types/cookie-session @types/express @types/jsonwebtoken
npm run pub

在这里插入图片描述
⬆ back to top

更新 import 参数

npm i @heysirius-common/common
import { errorHandler, NotFoundError } from '@heysirius-common/common';

⬆ back to top

更新 shared lib

cd ticketing/common
npm run pub
cd ../auth
npm update @heysirius-common/common
  • 看下我们的 pod 里面有没有更新成功
kubectl get pods
kubectl exec -it auth-depl-86c85d4895-n4bp4 sh
/app # cd node_modules/@heysirius-common/common
/app # cat package.json

⬆ back to top

国内 publish 不上去的解决

  • Option #1 用 nvm 换成国外的源
  • Option #2 selected 直接手动换源 npm config set registry https://registry.npmjs.org/

到现在一切正常
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你的 Java 服务代码监听在 `http://localhost:3000` 上,下面是一个使用 `socket.io-client` 连接 Java 服务端的前端代码示例: ```jsx import React, { useEffect, useState } from 'react'; import io from 'socket.io-client'; const SOCKET_SERVER_URL = 'http://localhost:3000'; // Java 服务端地址 function App() { const [messages, setMessages] = useState([]); useEffect(() => { const socket = io(SOCKET_SERVER_URL); // 监听来自 Java 服务端的消息 socket.on('message', (message) => { setMessages((messages) => [...messages, message]); }); // 在组件销毁时断开连接 return () => { socket.disconnect(); }; }, []); return ( <div> <h1>Messages:</h1> <ul> {messages.map((message, index) => ( <li key={index}>{message}</li> ))} </ul> </div> ); } export default App; ``` 在上述代码,我们先通过 `import` 语句导入了 `socket.io-client` 库,然后在组件创建了一个 `socket` 对象,通过调用 `io()` 方法并传入 Java 服务端的地址来连接服务端。在 `useEffect()` 钩子函数,我们监听了来自服务端的 `message` 事件,并将消息添加到 `messages` 数组。在组件销毁时,我们调用 `socket.disconnect()` 方法断开与 Java 服务端的连接。最后,我们在组件的 JSX 渲染了消息列表。 需要注意的是,Java 服务端必须使用 `socket.io` 库来与前端建立连接,否则无法使用 `socket.io-client` 连接。如果你的 Java 服务端没有使用 `socket.io` 库,可以参考 `socket.io` 官方文档来实现 Java 版本的 `socket.io` 服务端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值