Ocean 是一个基于 Java 的高性能服务器实现,利用 JDK21 的虚拟线程新特性,整体设计与功能参考 Nginx,目标是在 Java 生态中提供一个轻量、可扩展、易配置的服务器 / 网关解决方案。
Ocean 适用于以下场景:
-
HTTP / HTTPS 服务端
-
反向代理与负载均衡
-
轻量级 API 网关
-
静态资源服务
-
对 Java 新特性(虚拟线程)感兴趣的学习与实践项
- HTTP 请求解析与响应,还支持 HTTPS、HSTS、CORS 和 GZIP 压缩等常见 Web 功能
- 支持文件的上传与下载功能
- 基本的反向代理与负载均衡,支持多种负载均衡算法,还支持面向后端服务集群的简单灰度发布功能
- 基于配置中心的动态配置更新,几乎所有的服务器配置都可以通过配置中心实现动态配置,支持 Nacos 和 Apollo。 支持定时备份配置到服务端本地
- 支持端侧本地缓存与HTTP缓存,提升静态资源访问性能。端侧本地缓存支持多种缓存策略
- 支持请求限流和熔断机制
- 支持简单的控制台、数据大盘功能,以及 health 和 metrics 功能
- 更多功能等你来看……clone下代码一看便知(其实是写README的时候实在忘的差不多了)
- JDK 17 或更高版本,强烈推荐使用 JDK 21。更低版本 JDK 不保证运行兼容性
- Maven 3.6 或更高版本
- 如果使用配置中心功能,还需要一个 Nacos 或 Apollo 实例。对于使用 Nacos 的用户,需要在 server.properties 中正确配置连接信息; 对于使用 Apollo 的用户,需要修改 resources/META—INF 中的连接信息,或使用环境变量。具体参考以下文档:https://www.apolloconfig.com/#/en/client/java-sdk-user-guide
拉取项目到本地后,自行修改 resources 目录下的 server.properties 中的服务器配置,运行 Main.java 中的 main 方法即可运行
注意:如果使用 JDK 21 以下版本的 JDK,务必将 server.properties 中的 server.thread.virtual_threads_enabled 配置项设置为 false
运行以下命令将项目打包成一个可执行的 JAR 文件:
mvn clean package打包完成后,生成的 JAR 文件位于 target 目录下,直接运行就可以启动
java -jar target/ocean-1.0-SNAPSHOT.jar最常见的场景就是部署前端资源,比如各种网站。只需要把打包好的前端资源放在根目录下的 www 目录,启动服务器后访问 http://localhost:8080 就可以看到网站了
当然,端口号、资源目录都可以在 server.properties 中修改
MIT