Apache-ShenYu支持namespace功能(四)
教育的最高目标不是知识而是行动。——斯宾塞 本次适配是将几个页面的namespace选择框隐藏了,然后对data-permission数据权限配置弹框里添加了一个namespace选择框,并在内部切换namespace时候刷新表格 PR链接: https://github.com/apache/shenyu-dashboard/pull/479 隐藏namespace的逻辑很简单,首先用withRouter将react组件和dvajs的路由绑定: 1import { withRouter } from "dva/router"; 然后绑定: 1export default withRouter(GlobalHeader); 然后从props里取出当前路由 1const { location: { pathname } } = this.props; 进行判断,当不在下列路由里时,showNamespaces为true 12345678const showNamespaces = !~[ ...
PhaserJS网页2D游戏引擎
教育不可缺的是天性与训练。人必须趁年轻就开始学习。——普罗达哥拉斯 项目介绍 PhaserJS 是一个开源的 2D 游戏引擎,使用 HTML5 和 JavaScript 构建。它功能强大且灵活,广泛应用于网页游戏和移动游戏开发。PhaserJS 提供了丰富的 API 来支持图形渲染、物理引擎、动画、声音处理等常见的游戏开发功能,使开发者能够轻松创建跨平台的 2D 游戏。 PhaserJS 的主要特点: 丰富的图形和动画支持:提供 Sprite、Tilemap、Particle 等多种图形元素支持,方便实现复杂的游戏画面。 强大的物理引擎:内置多种物理引擎,包括 Arcade Physics 和 Matter.js,支持游戏物体的碰撞、重力等物理效果。 跨平台:PhaserJS 支持在浏览器、移动设备等多种平台上运行,适用于开发基于 Web 的跨平台游戏。 易用的 API:PhaserJS 提供了清晰、易用的 API,使得游戏开发流程更加顺畅和直观。 官方文档、GitHub地址 官方网站:PhaserJS Documentation GitHub 仓库:phase...
springboot单向推送给客户端SseEmitter
教育人就是要培养他对自己有更严格的要求。——苏霍姆林斯基 SseEmitter 是 Spring Framework 提供的一个类,用于处理服务器向客户端推送事件(Server-Sent Events, SSE)的功能。与 WebSocket 不同,SSE 是单向的,服务器可以推送数据到客户端,但客户端不能推送数据到服务器。SSE 适用于场景包括实时消息通知、进度更新、数据流推送等。Spring Boot 中通过 SseEmitter 实现 SSE 通信简单且高效。 Spring Boot 中的 SseEmitter 提供了一种轻量级的方式来向前端推送实时数据,它通过标准的 HTTP 协议工作,兼容性广泛且易于使用。 SseEmitter 的主要特点: 轻量级:基于 HTTP 协议,兼容性好,不需要复杂的配置。 单向推送:服务器向客户端推送数据,适合需要实时更新的场景。 长连接:通过持续连接,避免频繁的轮询操作。 官方文档、GitHub地址 官方文档:Spring SseEmitter Documentation GitHub 仓库:Spring Framework...
java异步操作测试库awaitility
教师的人格就是教育工作中的一切。——乌申斯基 项目介绍 Awaitility 是一个简洁且强大的 Java 库,用于简化异步操作的测试。它能够通过优雅的方式等待某些操作的结果变为期望的状态,尤其适用于测试异步系统或事件驱动系统中的代码。传统的测试工具和断言方法对于异步操作可能不够友好,而 Awaitility 则可以通过等待的方式确保测试的稳定性和可预测性。 Awaitility 是用流畅的 API 构建的,这使得编写等待代码变得更加直观和易于理解。在处理异步行为时,能够避免大量的显式线程睡眠操作,提升代码的可维护性。 Awaitility 的主要特点: 直观的 API:提供流畅的 API 来处理异步代码的等待和条件判断。 灵活的等待策略:支持多种超时和轮询机制,避免死锁或不必要的等待。 兼容各种测试框架:可以无缝集成到 JUnit、TestNG 等流行测试框架中。 简洁易用:通过少量代码实现复杂的异步等待逻辑。 GitHub地址 GitHub仓库:awaitility/awaitility 官方文档和 GitHub 仓库提供了详细的使用指南、示例代...
高效压缩库:Snappy Java
我来到这个世界,为了看看太阳和蓝色的地平线。——《城门开》 项目介绍 Snappy Java 是一个用于压缩和解压缩数据的高效Java库,它基于谷歌的 Snappy 压缩算法。Snappy 算法的设计目标是提供非常快速的压缩和解压缩操作,同时牺牲一定的压缩率以换取速度。在很多应用场景下,速度优先于压缩率,因此 Snappy 被广泛应用于数据处理、大数据分析和日志系统等场景。 Snappy Java 是 Snappy 算法的 Java 实现,它能够无缝集成到 Java 项目中,为开发者提供快速的压缩和解压缩操作,同时保留了跨平台的兼容性和高效的性能。 Snappy 的主要特点: 高压缩速度:相比于其他压缩算法,Snappy 的压缩速度非常快,适用于低延迟的应用。 适度压缩率:虽然压缩率不如一些其他压缩算法,但在大多数场景下,Snappy 的压缩率足以应对需求。 轻量级:Snappy 算法设计简洁,适合嵌入到各种应用中,尤其适合大规模的数据处理场景。 官方文档、GitHub地址 官方网站:Snappy Java Documentation GitHub仓库:xeri...
web组件库lion
君子耻不修,不耻见污;耻不信,不耻不见信;耻不能,不耻不见用。——荀子 github: https://github.com/ing-bank/lion 官方文档: https://lion-web.netlify.app/ Lion 是一组高性能、可访问且灵活的 Web 组件 它们提供了一个无主见的白标签层,可以扩展到您自己的组件层 高性能:专注于在所有相关浏览器中实现出色的性能,具有最少的依赖项 可及性:旨在符合 WCAG 2.2 AA 标准,以创建每个人都可以使用的组件 灵活性:通过 Web Components 和 JavaScript 类提供解决方案,这些类可以使用、采用和扩展以满足所有需求 现代代码:Lion 以纯 es 模块的形式分发 公开函数/类和 Web 组件:以最合适的形式提供功能 注意:我们的演示可能看起来有点平淡无奇,但这是故意的。它们仅带有功能性样式。这是有道理的,因为主要用例是扩展这些组件,如果您这样做,则不想覆盖现有样式。 Guides: Lion 安装: 1npm i @lion/ui 使用: 1234567891011121314...
Caffeine缓存
君子威而不猛,忿而不怒,忧而不惧,悦而不喜。——诸葛亮 项目介绍 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。 缓存和ConcurrentMap有点相似,但还是有所区别。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的元素,直到它们被从缓存当中手动移除。但是,Caffeine的缓存Cache 通常会被配置成自动驱逐缓存中元素,以限制其内存占用。在某些场景下,LoadingCache和AsyncLoadingCache 因为其自动加载缓存的能力将会变得非常实用。 Caffeine提供了灵活的构造器去创建一个拥有下列特性的缓存: 自动加载元素到缓存当中,异步加载的方式也可供选择 当达到最大容量的时候可以使用基于就近度和频率的算法进行基于容量的驱逐 将根据缓存中的元素上一次访问或者被修改的时间进行基于过期时间的驱逐 当向缓存中一个已经过时的元素进行访问的时候将会进行异步刷新 key将自动被弱引用所封装 value将自动被弱引用或者软引用所封装 驱逐(或移除)缓存中的元素时将会进行通知 写入传播到一个外部数据源当中 持续计...
Apache-ShenYu注册失败问题
金钱和时间是人生两种最沉重的负担,最不快乐的就是那些拥有这两种东西太多,多得不知怎样使用的人。——约翰逊 https://github.com/apache/shenyu/pull/5648 主要是当client id发生变化以后,再次启动ShenyuTestHttpApplication 会报错client id不匹配注册不上,这里调整了判断,如果token里不存在client id,就不进行校验 123456String clientIdFromToken = JwtUtils.getClientId(token);if (StringUtils.isNotEmpty(clientIdFromToken) && StringUtils.isNotEmpty(dashboardUserVO.getClientId()) && !StringUtils.equals(dashboardUserVO.getClientId(), clientIdFromToken)) { throw new Authe...
Apache-ShenYu支持namespace功能(三)
若我会见到你,事隔经年。我如何和你招呼,以眼泪,以沉默。——《春逝》 PR链接: [Improve] Rule and MetaData module adaptation namespace by VampireAchao · Pull Request #478 · apache/shenyu-dashboard · GitHub 本次主要是支持了Rule和MetaData部分的namespace功能 这里要注意的是别忘记切换namespace后,在componentDidUpdate中要进行判断 12345678componentDidUpdate(prevProps) { const { currentNamespaceId } = this.props; // 如果当前namespace变更 if (prevProps.currentNamespaceId !== currentNamespaceId) { // 重新按照当前`namespaceId`查询列表 this.query(); }...
Disruptor
有教养的头脑的第一个标志就是善于提问。——普列汉诺夫 官方文档: LMAX Disruptor github: GitHub - LMAX-Exchange/disruptor: High Performance Inter-Thread Messaging Library Disruptor是由LMAX Exchange开发的一个高性能并发框架,专门用于处理需要低延迟和高吞吐量的场景。与传统的队列模型相比,Disruptor通过无锁的环形缓冲区实现了极高的性能,适合用在对性能要求苛刻的金融交易系统、日志处理系统等领域。 Disruptor的核心概念 Disruptor框架的核心组件包括: RingBuffer: 环形缓冲区,用于存储事件。它的大小是2的幂次方,以便利用位运算进行快速计算。 Event: 事件对象,代表要处理的数据单元。 Producer: 生产者,负责将事件发布到RingBuffer中。 Consumer: 消费者,从RingBuffer中获取事件并处理。 这些组件协同工作,形成一个高效的数据处理流水线。 引入依赖: 12345<depe...
