• 微服务模块化需要的几个基础功能


    首先对项目拆分, 根据业务服务内容拆分项目, 最终结果是一堆dll. 相关的dll组合起来服务一项业务功能, 称为模块. 如果单独部署, 则为一个微服务模块. 

    这样先拆分模块之后根据具体项目配给的人力物力进行最终的部署: 哪些模块作为独立服务部署, 哪些模块组合成一个服务部署. 

    这里的模块所指的都是业务模块. 结构如图:

     于是模块化的微服务需要的几个基础功能就显现出来了:

    一 模块的生命周期

      一个模块接入服务中需要监听几个生命周期事件, 初始化配置启动停止...也可以作为一个基类由继承模块重写. 这样一个模块的基础定义完成. 

    二 模块间的接口调用

      模块内部有各种ApplicationService, 各个service之间通过接口IApplicationService进行调用. 

      于是, 对于host中有接口实现的则调用具体实现, 约等于直接调用. 对于分为两个host部署的模块, 自己host中不含接口具体实现的, 通过接口代理走服务发现负载均衡远程请求进行调用. 

      这里的关键是需要实现一个代理所有IApplicationService的接口调用代理类型. 目前我调查和使用过的是Autofac和AspectCore, 都可以. Autofac是基于Castle.DynamicProxy, AspectCore则是它的AspectCore.DynamicProxy组件, 可以单独使用组件. 个人喜欢单独使用Castle.DynamicProxy, 不需要更换asp.netcore的自带容器. 

    三 事件

      与接口调用类似, 事件也需要分为模块内事件和分布式事件两种. 

      内部事件派发很简单, 跟普通事件类似, 走内存. 分布式事件可以依赖RabbitMQ等, 类库有CAPMasstransit.

    四 其他分布式需要的功能

      如服务注册/发现/分布式事务等, 这是属于微服务(分布式)带来的问题, 无论模块化与否都存在. 

  • 相关阅读:
    Web开发者需具备的8个好习惯
    全球十大搜索引擎排名
    ContextWrapper
    PackageManager
    重写equals方法的注意事项
    StackOverflow 并不只是一个问答网站
    android 中ids.xml资源的使用
    The method dismissDialog(int) from the type Activity is deprecated
    百度员工离职总结:如何做个好员工?
    Mysql 自动化任务
  • 原文地址:https://www.cnblogs.com/pasoraku/p/13329821.html
Copyright © 2020-2023  润新知