Coder Social home page Coder Social logo

noear / water Goto Github PK

View Code? Open in Web Editor NEW
48.0 5.0 8.0 273.14 MB

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

Home Page: http://water.noear.org

License: GNU Lesser General Public License v2.1

Java 62.10% FreeMarker 26.40% CSS 3.92% JavaScript 7.58%
solon-cloud java microservice faas-platform event-bus log-service

water's Introduction

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.13.1</version>
</dependency>

<!-- solon cloud 集成版本 (也可用于 Spring Boot 项目) -->
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>water-solon-cloud-plugin</artifactId>
    <version>2.6.0</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

管理界面预览

  • 告警专用客户端

  • 告警工具

  • 日志查询

  • 消息总线

  • 服务监控

  • 配置管理

  • 函数计算

  • 开发助手

water's People

Contributors

noear avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.