{"id":36419035,"url":"https://github.com/solonlab/water","last_synced_at":"2026-01-11T17:02:02.189Z","repository":{"id":39801291,"uuid":"101988761","full_name":"solonlab/water","owner":"solonlab","description":"noear::一站式分布式服务治理中台。可以理解为微服务架构支持套件。5个服务包合计40m大小，超轻量级。功能相当于：consul + rabbitmq + elk + prometheus + openFaas + quartz +等等并有机结合在一起。对 k8s 友好，支持 ip 漂移、支持 k8s svc 映射。简单工作，早点下班：）","archived":false,"fork":false,"pushed_at":"2025-12-18T14:39:48.000Z","size":279795,"stargazers_count":56,"open_issues_count":3,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-21T19:35:02.808Z","etag":null,"topics":["event-bus","faas-platform","java","log-service","microservice","solon-cloud"],"latest_commit_sha":null,"homepage":"http://water.noear.org","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solonlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-08-31T10:19:51.000Z","updated_at":"2025-12-19T08:56:47.000Z","dependencies_parsed_at":"2023-02-17T02:01:46.866Z","dependency_job_id":"f903addb-62b4-476c-a2cc-fe51de83667f","html_url":"https://github.com/solonlab/water","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/solonlab/water","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solonlab%2Fwater","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solonlab%2Fwater/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solonlab%2Fwater/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solonlab%2Fwater/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solonlab","download_url":"https://codeload.github.com/solonlab/water/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solonlab%2Fwater/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28314260,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T14:58:17.114Z","status":"ssl_error","status_checked_at":"2026-01-11T14:55:53.580Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["event-bus","faas-platform","java","log-service","microservice","solon-cloud"],"created_at":"2026-01-11T17:02:01.570Z","updated_at":"2026-01-11T17:02:02.184Z","avatar_url":"https://github.com/solonlab.png","language":"Java","readme":"\u003ch1 align=\"center\" style=\"text-align:center;\"\u003e\n  Water\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n一站式分布式服务治理中台。简单工作，早点下班\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca target=\"_blank\" href=\"https://search.maven.org/search?q=org.noear%20water\"\u003e\n        \u003cimg src=\"https://img.shields.io/maven-central/v/org.noear.water/water.client.svg?label=Maven%20Central\" alt=\"Maven\" /\u003e\n    \u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"LICENSE\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/:license-AGPL3.0-blue.svg\" alt=\"AGPL3.0\" /\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href=\"https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html\"\u003e\n\t\t\u003cimg src=\"https://img.shields.io/badge/JDK-8+-green.svg\" alt=\"jdk-8+\" /\u003e\n\t\u003c/a\u003e\n    \u003cbr /\u003e\n    \u003ca target=\"_blank\" href='https://gitee.com/noear/water/stargazers'\u003e\n\t\t\u003cimg src='https://gitee.com/noear/water/badge/star.svg' alt='gitee star'/\u003e\n\t\u003c/a\u003e\n    \u003ca target=\"_blank\" href='https://github.com/noear/water/stargazers'\u003e\n\t\t\u003cimg src=\"https://img.shields.io/github/stars/noear/water.svg?logo=github\" alt=\"github star\"/\u003e\n\t\u003c/a\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\u003cp align=\"center\"\u003e\n\t\u003ca href=\"https://jq.qq.com/?_wv=1027\u0026k=6hGHvT1l\"\u003e\n\t\u003cimg src=\"https://img.shields.io/badge/QQ交流群-1410383-orange\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\n\n## 授权与许可\n\n本项目为商业开源项目，欢迎企业用户购买许可后使用。\n\n\n## 介绍（水孕育万物...）\n\n为Java服务开发和治理，提供一站式解决方案（可以理解为微服务架构支持套件）。基于 Solon 框架开发，并支持完整的 Solon Cloud 规范；已在生产环境跑了4年。\n\n\n功能相当于：consul + rabbitmq + elk + prometheus + openFaas + quartz + 等等，并有机结合在一起。 或者约等于：nacos + rocketmq + PlumeLog + prometheus + magic-api + xxl-job + 等。\n\n\n对 k8s 友好，支持 ip 漂移、支持 k8s svc 映射（通过上游配置，可真接将服务发现为 k8s service 地址）。\n\n\n\n## 开始\n\n### 了解框架与构件\n\n| 组件                          | 说明                                          | 环境要求         |\n|-----------------------------|---------------------------------------------|--------------|\n| water.client      | 框架：Water 客户端                                | jdk8 ~ jdk25 |\n| water-solon-cloud-plugin | 框架：Water 客户端 for solon（也可用于 Spring Boot 项目） | jdk8 ~ jdk25 |\n|                             |                                             |              |\n| waterapi          | 构建：Water 服务端                                | jdk11        |\n| watersev          | 构建：Water 后台服务（健康检测,数据监视,消息派发,定时任务等...）      | jdk11       |\n| wateradmin        | 构建：Water 控制台（支持LDAP登录）                      | jdk11       |\n| waterfaas         | 构建：Water FaaS 服务，提供轻量级FaaS服务                | jdk11       |\n|                             |                                             |              |\n| xwater         | 构建：Water 助理工具                               | jdk11       |\n\n\n### 控制台演示站\n\n地址： [http://water.noear.org](http://water.noear.org)  （账号：demo ；密码：demo ）\n\n\n关键持久化说明：\n\n* 日志持久化，支持：MySql、PostgreSQL、MongoDb、ElasticSearch、ClickHouse\n* 消息持久化，支持：MySql、PostgreSQL、MongoDb\n\n\n### 应用参考\n\n地址：[https://gitee.com/noear/marsh](https://gitee.com/noear/marsh)\n\n### 视频教程\n\n[[Water 教程一] 用 docker-compose 快速部署。轻松工作，早点下班哦：）](https://www.bilibili.com/video/BV1T44y1e7AS/)\n\n[[Water 教程二] 使用 Solon Coud + Water 开发之初体验](https://www.bilibili.com/video/BV1Xr4y1C76M/)\n\n[[Water 教程三] Water 是个一站式的服务治理平台，认识一下](https://www.bilibili.com/video/BV1KQ4y1U7ef/)\n\n[[Water 教程四] 配置服务应用及关键设计](https://www.bilibili.com/video/BV1tY411x7ja/)\n\n[[Water 教程五] 日志服务应用及轻小快的客户端设计](https://www.bilibili.com/video/BV1H44y1v7ES/)\n\n[[Water 教程六] 消息总线服务应用及内部架构设计概要](https://www.bilibili.com/video/bv1mM4y1A7kn/)\n\n[[Water 教程七] FaaS应用实战](https://www.bilibili.com/video/BV1eP4y1G7u2/)\n\n[Water 教程八] 服务监控与数剧监视实战\n\n[Water 教程九] 多账号管理及权限配置，还有LDAP登录配置\n\n[[Water 教程++] 基于源码的部署与运行](https://www.bilibili.com/video/BV1oz4y1F7Q4/)\n\n### (一) 使用\n\n#### 配置\n* pom.xml / mevan 配置\n```xml\n\u003c!-- 客户端版本 --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.noear.water\u003c/groupId\u003e\n    \u003cartifactId\u003ewater.client\u003c/artifactId\u003e\n    \u003cversion\u003e2.19.2\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003c!-- solon cloud 集成版本 （也可用于 Spring Boot 项目） --\u003e\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.noear.water\u003c/groupId\u003e\n    \u003cartifactId\u003ewater-solon-cloud-plugin\u003c/artifactId\u003e\n    \u003cversion\u003e2.19.2\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n* app.yml / 配置说明\n```yml\nsolon.app:\n  name: \"wateradmin\"\n  group: \"water\"\n\nsolon.cloud.water:\n  server: \"waterapi:9371\"           #WATER服务地址\n  config:\n    load: \"test.yml\"                #默认加载的配置\n  log:\n    default: \"water_log_admin\"      #默认日志记录器\n```\n\n#### 代码\n```java\npublic class DemoApp {\n    public void main(String[] args) {\n        Solon.start(DemoApp.class, args);\n    }\n}\n\n@Slf4j\n@Component\npublic class DemoFilter implements Filter {\n    @Override\n    public void doFilter(Context ctx, FilterChain chain) throws Throwable {\n        //1.开始计时（用于计算响应时长）\n        long start = System.currentTimeMillis();\n\n        try {\n            chain.doFilter(ctx);\n        } catch (Throwable e) {\n            //2.顺带记录个异常\n            log.error(\"{}\",e);\n        } finally {\n            //3.获得接口响应时长\n            long milliseconds = System.currentTimeMillis() - start;\n            CloudClient.metric().addTimer(Solon.cfg().appName(), \"path\", ctx.pathNew(), milliseconds);\n        }\n    }\n}\n\n@Configuration\npublic class DemoConfig {\n    @Bean\n    public DataSource db1(@CloudConfig(\"demoDb\") HikariDataSource ds) {\n        //配置一个数据源\n        return ds;\n    }\n    \n    @Bean\n    public I18nBundleFactory i18nBundleFactory(){\n        //将国际化服务，切换为云端接口\n        return new CloudI18nBundleFactory();\n    }\n}\n\n@Slf4j\n@Controller\npublic class DemoController{\n    @CloudConfig(name = \"demoDb\", autoRefreshed = true)  //配置服务的功能（注解模式）\n    DbContext demoDb;\n\n    @NamiClient            //RPC服务发现的功能（注解模式）\n    RockService rockService;\n   \n    @Mapping(\"/\")\n    public void test(){\n        //日志服务：写个日志\n        log.info(\"你好，日志服务\"); //(content)\n        TagsMDC.tag0(\"demo\");\n        log.error(\"{}\\r\\n{}\",\"test\",\"你好，日志服务\"); //(tag,summary,content)\n        \n        //配置服务：使用配置的数据库上下文进行查询\n        Map map = demoDb.table(\"water_reg_service\").limit(1).selectMap(\"*\");\n\n        //消息服务：发送消息\n        CloudClient.event().publish(new Event(\"demo.test\", \"{\\\"order_id\\\":1}\")); //（非注解模式）\n\n        //Rpc发现服务：调用Rpc接口\n        AppModel app = rockService.getAppById(12);\n    }\n}\n\n//消息订阅：订阅消息并处理（根据：topic 进行订阅）\n@Slf4j\n@CloudEvent(\"demo.test\")\npublic class Event_demo_test implements CloudEventHandler {\n    @Override\n    public boolean handle(Event event) throws Exception {\n        //处理消息...\n        log.info(\"我收到消息：\" + event.content());\n        return true;\n    }\n}\n\n\n//配置订阅：关注配置的实时更新\n@CloudConfig(\"demoDb\")\npublic class TestConfigHandler implements CloudConfigHandler {\n    @Override\n    public void handle(Config config) {\n\n    }\n}\n\n//分布式任务\n@CloudJob(name = \"demo_test\", cron7x = \"0 1 * * * ?\")\npublic class Job_test implements CloudJobHandler {\n    @Override\n    public void handle(Context ctx) throws Throwable {\n        //处理任务...\n        log.info(\"我被调度了\");\n    }\n}\n\n\n```\n\n### （二）代码演示\n\n[https://gitee.com/noear/water-examples](https://gitee.com/noear/water-examples)\n\n### （三）部署\n\n具体参考： [_deploy](_deploy)\n\n\n# 管理界面预览\n\n* 告警专用客户端\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/a0.jpg\" height=\"300\"/\u003e\u003cbr/\u003e\n\n* 告警工具\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/a1.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/a2.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/a3.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\n* 日志查询\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/b1.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\n* 消息总线\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/c1.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/c2.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/c3.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/c4.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/c5.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\n* 服务监控\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/d2.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/d4.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/d5.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/d6.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/d7.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/d7x.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/d8.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\n* 配置管理\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/e1.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/e3.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\n* 函数计算\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/f1.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/f2.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/f5.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/fx.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\n* 开发助手\n\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/h1.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/h2.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/h3.png\" height=\"300\"/\u003e\u003cbr/\u003e\n\u003cimg src=\"https://gitee.com/noear/water/raw/master/preview/h4.png\" height=\"300\"/\u003e\u003cbr/\u003e","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolonlab%2Fwater","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolonlab%2Fwater","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolonlab%2Fwater/lists"}