当前位置: 首页 > news >正文

微服务qiankun通信方式

qiankun:

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

qiankun的五种通信方式

1、localStorage/sessionStorage
2、通过路由参数共享
3、官方提供的 props
4、官方提供的 actions
5、使用vuex或redux管理状态通过shared分享

1、localStorage/sessionStorage

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

父应用

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 时会默认调用

具体示例:

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}}
];

子应用 

// 在子应用中使用就可以访问到这个parentActions了
this.$root.parentActions.setGlobalState({ cont: '我是父应用传下来的数据' })// 调用挂载在 actions 上的自定义方法获取当前的全局 state
this.$root.parentActions.getGlobalState()

5、shared 方案 

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

主应用 // shared.tsimport 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;

 子应用  

import shared from './shared';// 获取Token
shared.getToken(); 
http://www.lryc.cn/news/241356.html

相关文章:

  • 【Azure 架构师学习笔记】-Azure Storage Account(7)- 权限控制
  • 听GPT 讲Rust源代码--src/tools(2)
  • 【python学习】基础篇-常用模块-collections模块:数据结构,如列表、元组、字典和集合等
  • 【电路笔记】-电源电压
  • kali部署ARL灯塔资产系统及使用教程
  • 一、用户管理
  • Could not publish to the server. java.lang.NullPointerException
  • SpringMVC(三)
  • 打印菱形-第11届蓝桥杯选拔赛Python真题精选
  • 『亚马逊云科技产品测评』活动征文|搭建Squoosh图片在线压缩工具
  • 基于亚马逊云科技大语言模型等服务打造企业知识库
  • FFmpeg 使用
  • NLP的使用
  • Navicat DML 操作
  • Springboot-热部署-IDEA2023
  • 人工智能和AR/VR:AI在AR和VR中扮演什么角色?行业应用有哪些?
  • Linux进程通信之共享内存
  • 接口自动化测试:pytest基础讲解
  • 基于JavaWeb+SpringBoot+Vue医院管理系统小程序的设计和实现
  • 收藏这几个开源库,写css你会笑出声
  • 给localStorage缓存添加全局监听器
  • blk_mq_init_queue函数学习记录
  • 高防服务器的工作原理
  • 2023.11.19使用flask制作一个文件夹生成器
  • 【04】ES6:字符串的扩展
  • Docker可视化管理界面工具Portainer安装
  • css实现水波纹效果
  • 一种全新且灵活的 Prompt 对齐优化技术
  • 8:kotlin 类型检查和转换(Type checks and casts)
  • 命令模式 (Command Pattern)