NAYOTA开放平台 NAYOTA开放平台
首页
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 核心配置和约定
  • 自动生成front matter
  • Markdown 容器
  • Markdown 中使用组件
  • 相关文章

    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
    • 在线编辑和新增文章的方法
  • 主题配置
  • 首页配置
  • front matter配置
  • 目录页配置
  • 添加摘要
  • 修改主题颜色和样式
  • 评论栏
资源
问答
范例
开发学习资料
开放平台
首页
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 核心配置和约定
  • 自动生成front matter
  • Markdown 容器
  • Markdown 中使用组件
  • 相关文章

    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
    • 在线编辑和新增文章的方法
  • 主题配置
  • 首页配置
  • front matter配置
  • 目录页配置
  • 添加摘要
  • 修改主题颜色和样式
  • 评论栏
资源
问答
范例
开发学习资料
开放平台
  • 目录
  • Linux

    • 说明
    • service
    • linux系统坏道检测与修复
  • docker

    • docker介绍与安装
    • docker使用
    • 镜像创建
    • docker-compose介绍和使用
    • docker 日志查看命令
  • nodejs

    • node14的docker容器更新
    • 内存管理,泄露,调试
  • vue

    • vue3新特性
  • 微服务架构

    • redis介绍
    • seneca介绍
      • 简介
      • 目录
        • 如何编写Seneca插件
        • seneca 匹配模式优先级
        • 基于amqp消息中间件的微服务注意事项
        • 新的笔记
    • redis docker安装
  • 物联网通信

    • 物联网通信协议说明
  • mongodb数据库

    • mongo常用查询函数
  • 开发学习资料
  • 微服务架构
Nayota
2022-06-02

seneca介绍

# Seneca

# 简介

seneca 是一款nodejs的微服务工具包,旨在快速,规范开发微服务之间的通信接口,
本文档是在已经简单了解过seneca之后,一份进阶文档,将seneca开发中一些常用的功能和插件做一个使用说明

# 目录

# 如何编写Seneca插件

几乎所有的功能实现都是以插件形式编写的
除了自己编写插件,主要还有调用一些开源的插件 seneca官网上有部分seneca核心插件,在开发过程中根据不同需求需要调用的 比如:我们用到消息队列中间件来搭建我们的服务通道,使用rabbitMq做消息中间件
那么就需要调用seneca-amqp-transport插件
一个规范的seneca服务启动index.js结构应该是这样的

const Seneca = require('seneca')

Seneca({tag: 'my_microservice'})
  .quiet()
  .use('my_plugin')
  .use('my_init_plugin')
  .ready(function() {
    console.log('service ready:', this.id)
    console.log('plugins:', Object.keys(this.list_plugins()))
  })

插件的编写这里就不多讲了
就记录下编写插件中几个注意点:

  • 有部分插件可能需要初始化init操作
  • 插件如果在初始化的时候出错了,整个seneca将直接崩溃,保证服务上的插件正确初始化。无法保证的情况下就要做服务出故障情况下自动重启
  • 插件定义时候的函数名称将是他的插件名称(当然还有其他定义插件名称的方式,不过这个是简单常用的),所以,注意:每个插件定义的时候不要用相同的函数名,这会让你无法区分他们
  • 插件开发中,匹配命令没有固定的模式要求,不过为了规范开发,一般都有role和cmd这两个属性来进行匹配
  • 默认重复use同一个插件只加载最后的一个,如果你要同一个插件做不同的事,需要同一个插件的不同实例,那么在use的时候需要给每个插件定义不同的tag.这样就不会被覆盖掉
    tag的两种添加方式:tag属性,或在字符串后加$tag
// tags.js
var seneca = require('seneca')()

seneca.use( {name:'./bar.js',tag:'AAA'}, {zed:1,color:'red'} )
seneca.use( './bar.js$BBB',              {zed:2,color:'green'} )

seneca.act( {foo:'bar',zed:1}, console.log )
seneca.act( {foo:'bar',zed:2}, console.log )
  • 在你的一个微服务中,有很多插件,需要很多插件初始化选项,规范的定义方式是将他们都统一放在一个seneca.options.js(默认,会自动加载)中去定义,如果你在开发模式和产品模式下有不同的选项参数,可以定义不同的dev.options.js和prod.options.js,不过这样需要手动加载选项
var seneca = require('seneca')()
seneca.options('./dev.options.js')

# seneca 匹配模式优先级

更多的匹配项为最终被匹配的action
client pin的匹配项很重要

# 基于amqp消息中间件的微服务注意事项

开发过程中发现很多情况会导致服务崩溃 记录几个崩溃的情况

  1. 如果没有找到匹配项,在amqp消息队列服务中会直接崩溃,所有需要一个通配匹配项来处理
  2. done无法处理非json结构的数据,amqp 中会直接导致服务崩溃,不能处理Error等,在回调的时候一定要将数据转换成json

# 新的笔记

web 微服务

  1. 多个微服务共用情况下pin做匹配是非常有必要的,不然act就不知道将消息发给哪个微服务
  2. 多个相同微服务是无法组成自动负载均衡的,seneca会将消息发送给最后声明的那个client连接
  3. listen和client也就是是服务端和客户端可以一起声明,但是本地声明的微服务函数(服务端)会优先被匹配
上次更新: 2022/06/02, 13:43:00
redis介绍
redis docker安装

← redis介绍 redis docker安装→

Theme by Vdoing | Copyright © 2021-2023
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式