Skip to content
/ water Public

noear::一站式分布式服务治理中台。可以理解为微服务架构支持套件。5个服务包合计40m大小,超轻量级。功能相当于:consul + rabbitmq + elk + prometheus + openFaas + quartz +等等并有机结合在一起。对 k8s 友好,支持 ip 漂移、支持 k8s svc 映射。简单工作,早点下班:)

License

Notifications You must be signed in to change notification settings

noear/water

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Nov 23, 2024
b480ce2 · Nov 23, 2024
Oct 7, 2024
Nov 11, 2024
May 5, 2022
Nov 11, 2024
Oct 4, 2023
Sep 25, 2024
Sep 25, 2024
Oct 7, 2024
Oct 1, 2024
Nov 23, 2024
Sep 25, 2024
Oct 7, 2024
Oct 1, 2024
Nov 11, 2022
Jul 25, 2023
Jan 27, 2024
Nov 11, 2024
Sep 25, 2024
Mar 22, 2023
Jun 2, 2021

Repository files navigation

Water

一站式分布式服务治理中台。简单工作,早点下班

Maven LGPL2.1 jdk-8+
gitee star github star


介绍(水孕育万物...)

为Java服务开发和治理,提供一站式解决方案(可以理解为微服务架构支持套件)。基于 Solon 框架开发,并支持完整的 Solon Cloud 规范;已在生产环境跑了4年。

功能相当于:consul + rabbitmq + elk + prometheus + openFaas + quartz + 等等,并有机结合在一起。 或者约等于:nacos + rocketmq + PlumeLog + prometheus + magic-api + xxl-job + 等。

对 k8s 友好,支持 ip 漂移、支持 k8s svc 映射(通过上游配置,可真接将服务发现为 k8s service 地址)。

开始

了解框架与构件

组件 说明
org.noear:water.client 框架:Water 客户端
org.noear:water-solon-cloud-plugin 框架:Water 客户端 for solon(也可用于 Spring Boot 项目)
org.noear:waterapi 构建:Water 服务端
org.noear:watersev 构建:Water 后台服务(健康检测;数据监视;消息派发;定时任务等...)
org.noear:wateradmin 构建:Water 控制台(支持LDAP登录)
org.noear:waterfaas 构建:Water FaaS 服务,提供轻量级FaaS服务
org.noear:xwater 构建:Water 助理工具

控制台演示站

地址: http://water.noear.org (账号:demo ;密码:demo )

关键持久化说明:

  • 日志持久化,支持:MySql、PostgreSQL、MongoDb、ElasticSearch、ClickHouse
  • 消息持久化,支持:MySql、PostgreSQL、MongoDb

应用参考

地址:https://gitee.com/noear/marsh

视频教程

[Water 教程一] 用 docker-compose 快速部署。轻松工作,早点下班哦:)

[Water 教程二] 使用 Solon Coud + Water 开发之初体验

[Water 教程三] Water 是个一站式的服务治理平台,认识一下

[Water 教程四] 配置服务应用及关键设计

[Water 教程五] 日志服务应用及轻小快的客户端设计

[Water 教程六] 消息总线服务应用及内部架构设计概要

[Water 教程七] FaaS应用实战

[Water 教程八] 服务监控与数剧监视实战

[Water 教程九] 多账号管理及权限配置,还有LDAP登录配置

[Water 教程++] 基于源码的部署与运行

(一) 使用

配置

  • pom.xml / mevan 配置
<!-- 客户端版本 -->
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>water.client</artifactId>
    <version>2.15.1</version>
</dependency>

<!-- solon cloud 集成版本 (也可用于 Spring Boot 项目) -->
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>water-solon-cloud-plugin</artifactId>
    <version>3.0.3</version>
</dependency>
  • app.yml / 配置说明
solon.app:
  name: "wateradmin"
  group: "water"

solon.cloud.water:
  server: "waterapi:9371"           #WATER服务地址
  config:
    load: "test.yml"                #默认加载的配置
  log:
    default: "water_log_admin"      #默认日志记录器

代码

public class DemoApp {
    public void main(String[] args) {
        SolonApp app = Solon.start(DemoApp.class, args);

        //监控服务:之:添加接口性能记录(一般这个过滤器写成独立类)
        Logger log = LoggerFactory.getLogger(DemoApp.class);
        app.filter((ctx, chain) -> {
            //1.开始计时(用于计算响应时长)
            long start = System.currentTimeMillis();

            try {
                chain.doFilter(ctx);
            } catch (Throwable e) {
                //2.顺带记录个异常
                log.error("{}",e);
            } finally {
                //3.获得接口响应时长
                long milliseconds = System.currentTimeMillis() - start;
                CloudClient.metric().addMeter(Solon.cfg().appName(), "path", ctx.pathNew(), milliseconds);
            }
        });
    }
}

@Configuration
public class DemoConfig {

    @Bean
    public DataSource db1(@CloudConfig("demoDb") HikariDataSource ds) {
        //配置一个数据源
        return ds;
    }
    
    @Bean
    public I18nBundleFactory i18nBundleFactory(){
        //将国际化服务,切换为云端接口
        return new CloudI18nBundleFactory();
    }
}

@Slf4j
@Controller
public class DemoController{
    @CloudConfig(name = "demoDb", autoRefreshed = true)  //配置服务的功能(注解模式)
    DbContext demoDb;

    @NamiClient            //RPC服务发现的功能(注解模式)
    RockService rockService;
   
    @Mapping("/")
    public void test(){
        //日志服务:写个日志
        log.info("你好,日志服务"); //(content)
        TagsMDC.tag0("demo");
        log.error("{}\r\n{}","test","你好,日志服务"); //(tag,summary,content)
        
        //配置服务:使用配置的数据库上下文进行查询
        Map map = demoDb.table("water_reg_service").limit(1).selectMap("*");

        //消息服务:发送消息
        CloudClient.event().publish(new Event("demo.test", "{\"order_id\":1}")); //(非注解模式)

        //Rpc发现服务:调用Rpc接口
        AppModel app = rockService.getAppById(12);
    }
}

//消息订阅:订阅消息并处理(根据:topic 进行订阅)
@Slf4j
@CloudEvent("demo.test")
public class Event_demo_test implements CloudEventHandler {
    @Override
    public boolean handle(Event event) throws Exception {
        //处理消息...
        log.info("我收到消息:" + event.content());
        return true;
    }
}


//配置订阅:关注配置的实时更新
@CloudConfig("demoDb")
public class TestConfigHandler implements CloudConfigHandler {
    @Override
    public void handle(Config config) {

    }
}

//分布式任务
@CloudJob(name = "demo_test", cron7x = "0 1 * * * ?")
public class Job_test implements CloudJobHandler {

    @Override
    public void handle(Context ctx) throws Throwable {
        //处理任务...
        log.info("我被调度了");
    }
}

(二)代码演示

https://gitee.com/noear/water-examples

(三)部署

具体参考: _deploy

管理界面预览

  • 告警专用客户端

  • 告警工具

  • 日志查询

  • 消息总线

  • 服务监控

  • 配置管理

  • 函数计算

  • 开发助手

About

noear::一站式分布式服务治理中台。可以理解为微服务架构支持套件。5个服务包合计40m大小,超轻量级。功能相当于:consul + rabbitmq + elk + prometheus + openFaas + quartz +等等并有机结合在一起。对 k8s 友好,支持 ip 漂移、支持 k8s svc 映射。简单工作,早点下班:)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published