放弃SpringBoot !用基于Solon的H-Spi构建一个插件化业务平台

为什么使用Solon H-Spi?

构建java工程(c/js/py…),一般会使用预制法,构建系统内各个小部件、小模块。使得在开发运维时,更快适应业务变化和市场变化。
场景:工程应用功能,又小、又散、又敏捷。
能力:运营开发方面,需要灵敏、需要自由组装。

那么Solon官方给的解析是:

插件热插拔管理机制(H-Spi)
插件热插拔管理机制,简称:H-Spi。是框架提供的生产时用的另一种高级扩展方案。相对E-Spi,H-Spi 更侧重隔离、热插热拔、及管理性。
应用时,是以一个业务模块为单位进行开发,且封装为一个独立插件包。
1、特点说明
所有插件包 “独享” ClassLoader、AppContext、配置;完全隔离
可通过 Solon.app(), Solon.cfg(), Solon.context() 等…手动获取主程序或全局的资源
模块可以打包成一个独立的插件包(放在体外加载),也可以与主程序一起打包。“分”或“合”也是自由
更新插件包,不需要重启主服务。热更新
开发时,所有资源完全独立自控。且必须完成资源移除的任务
模块之间的通讯,尽量交由事件总线(EventBus)处理。且尽量用弱类型的事件数据(如Map,或 JsonString)。建议结合 “DamiBus” 一起使用,它能帮助解耦
主程序需要引入 “solon-hotplug” 依赖,对业务插件包进行管理
2、关于 ClassLoader 隔离
在 ClassLoader 隔离下,开发业务是比较麻烦的。注意:
父级 ClassLoader (一般,公共资源放这里)
子级,可以获取并使用它的类或资源
如果有东西注册,在插件 stop 事件里要注销掉
同级 ClassLoader
同级,无法相互使用类或资源
不要有显示类的交互
一般通过事件总线进行交互
交互的数据一般用父级 ClassLoader 的实体类
或者用弱类型的数据,如 json(像使用远程接口那样对待)
尽量让插件之间,相互比较独立,不需要什么交互(或少量使用事件总线交互)。

用一张图说明,H-Spi为我们处理了什么:

image
上图,绿色部分,按需打包:

  1. 可以完全打包到主应用中
  2. 将主应用、文章插件、财务插件等等插件。全部各自独立打包
  3. 主应用,上传插件包,即可启动具体插件。

项目分享 (基于Solon的H-Spi构建的插件化业务平台)

基于Solon的H-Spi构建的插件化业务平台 https://gitee.com/uidoer/solon-manager

简介:

Solon-Manager 基于Solon的不分离系统。 引入h-spi插件管理,方便平台化管理你的功能插件(内置cms管理系统)。 插件开发方面,按开发指引,开发者自行开发插件。 上传后,在系统内,自行上传jar包,按需扩展、运行插件功能。 技术选型: solon / layui / mybatis-plus / redis

solon 插件平台化的操作方式:

solon插件化的操作方式

这样,我们就启动了一个外部的插件到应用中。这个过程是不需要重启主应用的。不需要停机进行安装或者更新。
接下来,可以访问该插件的入口: http:😕/localhost:8080/cms/
(注意:上方链接的 /cms/ 部分是这个插件的入口)
这个插件运行的效果是:
image

那么,效果是了解了。那么如何开发呢?

开发步骤

 git clone https://gitee.com/uidoer/solon-manager 
  1. 推荐使用idea + mysql .
  2. 导入./doc/mysql.sql 和 ./doc/cms/sql/jfinal_project_center.sql
  3. 启动solon-system(主应用)启动类是:vip.fuck.sm.SolonManagerApplication
  4. 打开主应用入口:http://localhost:8080/index/login 进行登录 ( admin / 123456 )
    简要提及:为了方便开发调试,我已经在主应用导入了 cms模块
        <dependency>
             <groupId>vip.fuck.sm.plugins.cms</groupId>
             <artifactId>cms</artifactId>
             <version>1.0</version>
             <scope>compile</scope>
         </dependency>
    
  5. maven package 打包一下 cms模块
  6. 将打包后的cms.jar包,上传到主应用进行启动
  7. 打开cms首页:http://localhost:8080/cms
  8. 打开cms后台:http://localhost:8080///cms//admin/login ( admin / 123456 )

这样,一把下来,就体验了H-SPI带来的构建体验、运行体验。

同样,如果感兴趣的同学,可以fork,进行二开。
文档教程:

### 关于 Solon AI MCP Server 的技术信息 Solon AI 是一个基于 Java 的轻量级框架,旨在简化微服务架构下的开发流程。`solon-ai-mcp-server` 是其生态系统中的一个重要模块,主要用于支持模型控制协议(Model Control Protocol, MCP)。以下是关于 `solon-ai-mcp-server` 的一些技术和使用方面的详细介绍: #### 1. **Maven 依赖** 要集成 `solon-ai-mcp-server` 到项目中,可以通过 Maven 添加以下依赖项: ```xml <dependency> <groupId>org.noear</groupId> <artifactId>solon-ai-mcp</artifactId> </dependency> ``` 此依赖提供了基础功能以构建和运行 MCP 服务器[^1]。 #### 2. **基本配置** 为了启用并正确配置 `solon-ai-mcp-server`,需要在项目的 `application.properties` 文件中设置如下参数: ```properties spring.ai.mcp.server.enabled=true spring.ai.mcp.server.name=my-solon-mcp-server spring.ai.mcp.server.version=1.0.0 spring.ai.mcp.server.type=ASYNC spring.ai.mcp.server.sse-message-endpoint=/mcp/stream-messages ``` 这些属性定义了 MCP 服务器的行为模式以及消息流的处理方式[^3]。 #### 3. **启动与初始化** 通过继承或扩展默认的服务类,开发者能够快速创建自定义逻辑的服务实例。例如: ```java import org.noear.solon.annotation.Component; import org.noear.solon.core.Aop; @Component public class MyCustomService extends AbstractMcpservice { @Override public String processRequest(String input) { // 自定义业务逻辑 return "Processed: " + input; } } ``` 在此基础上,确保应用上下文中已注册该组件以便被自动扫描加载[^4]。 #### 4. **客户端交互** 虽然当前讨论重点在于服务端部分,但了解如何设计兼容性强的客户端同样重要。Python 实现了一个简单的例子展示怎样连接到远程部署好的 MCP Server 并发送请求获取响应数据[^2]: ```python import requests url = 'http://localhost:8080/mcp/api' payload = {'text': 'hello world'} headers = {'Content-Type': 'application/json'} response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` 以上脚本演示了向本地运行的服务发起 POST 请求的过程,并解析返回的结果作为 JSON 格式输出显示给用户查看。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值