尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Solon Web 的“分身术”:单应用多端口监听,化身多重服务

Solon Web 的“分身术”:单应用多端口监听,化身多重服务
📅 发布时间:2026/6/17 23:35:45
该方案为复杂业务场景下的服务部署提供了灵活而高效的解决方案,既保证了服务间的逻辑隔离,又实现了资源的有效利用。

一、概述

常规 Solon Web 应用通常采用单一端口提供服务。然而在实际业务场景中,我们往往需要单个应用具备"多面服务"能力:在不同端口上提供功能完全独立的服务模块。

典型应用场景:

  • 外部 API 服务 + 内部监控端口:对外提供业务接口,对内提供运维监控
  • 用户前台系统 + 管理后台系统:同一应用同时服务终端用户和运营管理
  • 多租户隔离服务:不同端口服务不同客户群体,实现逻辑隔离

二、场景示例

以电商平台开发为例,我们需要在同一应用中集成:

服务类型 端口 核心功能
用户端服务 8082 商品浏览、购物车管理、订单处理
管理端服务 8083 商品管理、订单管理、数据统计

两套服务功能逻辑完全独立,但需要共享应用部署资源。

三、技术实现方案

采用多端口方式。多端口有个好处,不同端口可以采用不同的运维策略。

1. 多端口配置

配置主端口(app.yml):

server.port: 8082 #用户端服务

动态添加管理端口:

import org.noear.solon.Solon;
import org.noear.solon.annotation.SolonMain;
import org.noear.solon.server.http.HttpServerConfigure;@SolonMain
public class App {public static void main(String[] args) {Solon.start(App.class, args, app -> {app.onEvent(HttpServerConfigure.class, config -> {config.addHttpPort(8083); // 添加管理端服务端口});});}
}

2、端口级访问控制

通过过滤器实现基于端口的访问权限控制:

import org.noear.solon.annotation.Component;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Filter;
import org.noear.solon.core.handle.FilterChain;@Component(index = -1) // 高优先级过滤器
public class PortBasedFilter implements Filter {private static final int USER_PORT = 8082;private static final int ADMIN_PORT = 8083;@Overridepublic void doFilter(Context ctx, FilterChain chain) throws Throwable {int currentPort = ctx.localPort();if (currentPort == ADMIN_PORT) {handleAdminRequest(ctx);} else if (currentPort == USER_PORT) {handleUserRequest(ctx);} else {ctx.status(403).output("Forbidden: Invalid access port");return;}chain.doFilter(ctx);}private void handleUserRequest(Context ctx) {// 用户端路径验证if (!ctx.pathNew().startsWith("/api/user/")) {ctx.status(401).output("Unauthorized: User API required");return;}validateUserRequest(ctx);}private void handleAdminRequest(Context ctx) {// 管理端路径验证if (!ctx.pathNew().startsWith("/api/admin/")) {ctx.status(401).output("Unauthorized: Admin API required");return;}validateAdminRequest(ctx);}private void validateUserRequest(Context ctx) {// 用户端请求验证逻辑String userAgent = ctx.userAgent();if (userAgent == null || userAgent.trim().isEmpty()) {throw new SecurityException("Invalid user request: User-Agent required");}}private void validateAdminRequest(Context ctx) {// 管理端身份验证String token = ctx.header("Authorization");if (token == null || !token.startsWith("Bearer ")) {throw new SecurityException("Admin authentication required");}// Token 验证逻辑if (!isValidAdminToken(token.substring(7))) {throw new SecurityException("Invalid admin token");}}private boolean isValidAdminToken(String token) {// 实现具体的 Token 验证逻辑return token != null && token.length() > 10;}
}

3、模块化控制器设计

用户端控制器:

import org.noear.solon.annotation.*;@Controller
@Mapping("/api/user")
public class UserController {@Get@Mapping("/products")public String getProducts() {return "User Products API";}@Post@Mapping("/cart")public String addToCart() {return "Add to cart";}@Get@Mapping("/orders")public String getOrders() {return "User orders list";}
}

管理端控制器:

import org.noear.solon.annotation.*;@Controller
@Mapping("/api/admin")
public class AdminController {@Get@Mapping("/products")public String manageProducts() {return "Admin Products Management";}@Get@Mapping("/statistics")public String getStatistics() {return "Admin Statistics Dashboard";}
}

四、方案优势

  1. 资源复用:共享应用上下文,减少系统资源占用
  2. 部署简化:单一应用包包含多套服务功能
  3. 隔离性:端口级别的访问控制和业务逻辑隔离
  4. 灵活性:不同端口可采用独立的运维策略和安全配置

五、扩展建议

  • 结合配置中心实现端口动态管理
  • 集成监控组件,分别统计各端口服务指标
  • 基于端口实现差异化的限流和熔断策略

该方案为复杂业务场景下的服务部署提供了灵活而高效的解决方案,既保证了服务间的逻辑隔离,又实现了资源的有效利用。

相关新闻

  • 2025-11-12 PQ v.Next日志记录
  • 如何在WPF中实现ComboBox多选 - 教程
  • 详细介绍:SQL Server 2019实验 │ 管理SQL Server的安全性

最新新闻

  • 2026黄金回收机构实力排名!大连5大正规平台实测,黄金变现靠谱选择 - 奢品小当家
  • Claude 3.5 Sonnet实战指南:代码生成与RAG优化
  • 高效图像标注实战指南:5步掌握make-sense专业标注流程
  • JMeter性能测试实战指南:从核心概念到分布式压测与结果分析
  • 豆包提示词四步转化法:从模糊需求到可执行AI协作协议
  • PowerPC指令集架构解析与MPC857T处理器应用实践

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号