微服务qiankun通信方式

qiankun:

是一种类似于微服务的架构,是将一个大型应用拆分成若干个更小、更简单,可以独立开发、测试和部署的子应用,然后由一个基座应用根据路由进行应用切换,主要是为了解决大型工程在变更、维护、扩展等方面的困难而提出的!

qiankun的五种通信方式

1、localStorage/sessionStorage

2、通过路由参数共享

3、官方提供的 props

4、官方提供的 actions

5、使用vuex或redux管理状态通过shared分享

1、localStorage/sessionStorage

不用区分域名,在 qiankun 中应用使用不同的域名也是可以获取得到,主要运行在主应用上所以还是运行在同一个域名上也就是主应用的域名。

父应用

objectivec 复制代码
localStorage.setItem('token', '我是保存在本地的数据')

子应用 获取数据

复制代码
const token = localStorage.getItem('token')

2、通过路由参数共享

url 上拼接一些参数,父子应用都可以通过 route 来获取到

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {

// 路由参数获取

})

3、官方提供的 props

父应用把父路由的实例传递给子应用 props 接收

4、官方提供的 actions

返回action 实例并挂载了三个函数

1、onGlobalStateChange:在当前应用监听全局状态有变更触发

2、setGlobalState: 可以在应用中任何地方调用来修改全局状态

3、offGlobalStateChange:移除当前应用的状态监听微应用 umount 时会默认调用

具体示例:

objectivec 复制代码
actions.ts文件

import { initGlobalState, MicroAppStateActions } from 'qiankun';

const state = {
  cont:''
};

// 初始化 state
const actions: MicroAppStateActions = initGlobalState(state);

actions.onGlobalStateChange((state, prev) => {
  // state: 变更后的状态; prev 变更前的状态
});

// 定义一个获取state的方法下发到子应用
actions.getGlobalState = function () {
  return state
}

export default actions;

父应用

复制代码
import actions from './actions'
const apps = [
  {
    props: {
      parentActions: actions
    }
  }
];

子应用

objectivec 复制代码
// 在子应用中使用就可以访问到这个parentActions了
this.$root.parentActions.setGlobalState({ cont: '我是父应用传下来的数据' })

// 调用挂载在 actions 上的自定义方法获取当前的全局 state
this.$root.parentActions.getGlobalState()

5、shared 方案

父应用通过 vuex 或者 redux 维护一个 state然后创建一个 shared ,和 actions 类似

objectivec 复制代码
主应用 

// shared.ts

import store from "./store";

class Shared {
  /**
   * 获取 Token
   */
  public getToken(){
    return store.getState() || "";
  }

  /**
   * 设置 Token
   */
  public setToken(token){
    store.dispatch({
      type: "SET_TOKEN",
      payload: token
    });
  }
}

const shared = new Shared();

export default shared;

子应用

objectivec 复制代码
import shared from './shared';

// 获取Token
shared.getToken(); 
相关推荐
龙山云仓28 分钟前
MES系统超融合架构
大数据·数据库·人工智能·sql·机器学习·架构·全文检索
未来龙皇小蓝39 分钟前
RBAC前端架构-02:集成Vue Router、Vuex和Axios实现基本认证实现
前端·vue.js·架构
Tadas-Gao43 分钟前
深度学习与机器学习的知识路径:从必要基石到独立范式
人工智能·深度学习·机器学习·架构·大模型·llm
研究司马懿1 小时前
【云原生】Gateway API高级功能
云原生·go·gateway·k8s·gateway api
啊森要自信1 小时前
CANN ops-cv:揭秘视觉算子的硬件感知优化与内存高效利用设计精髓
人工智能·深度学习·架构·transformer·cann
国强_dev1 小时前
轻量级实时数仓架构选型指南
架构
roman_日积跬步-终至千里1 小时前
【系统架构设计-综合题】计算机系统基础(1)
架构
瑶山2 小时前
Spring Cloud微服务搭建五、集成负载均衡,远程调用,熔断降级
spring cloud·微服务·负载均衡·远程调用·熔断降级
C澒2 小时前
多场景多角色前端架构方案:基于页面协议化与模块标准化的通用能力沉淀
前端·架构·系统架构·前端框架
代码游侠2 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构