Water(水孕育万物...)

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

功能约等于:consul + rabbitmq + elk + prometheus + openFaas + quartz 等一些别的功能,并有机结合在一起。

本次更新

  • 服务 watersev,子级服务增加各自的注册。从而形成子级服务的集群

    • 服务 watersev-pln,可自由集群,并让每个任务分布到集群中运行
    • 服务 watersev-mot,可自由集群,并让每个任务分布到集群中运行
    • 服务 watersev-msgexg,可自由集群,并分解borker到不同节点上
    • 服务 watersev-msgdis,可自由集群,并分解borker到不同节点上
    • 服务 watersev-sevchk,取消启动时需要 reset 的逻辑
  • 服务 wateradmin
    • 增加服务规模、消息主题规模设置,从而自动调整控制台布局
  • 服务 waterapi
    • 镜像端口改为:9371
    • 优化日志记录格式,强调输出输出概念和上下文随带
  • 服务 waterraas
    • 端口改为:9375 (之前为:9376)
  • 服务 waterpaas
    • 更名为:waterfaas
  • 调整 PaaS 概念,将同时包含:FaaS + RaaS
    • FaaS 调整:

      • 数据表 paas_file 更名:luffy_file。强调FaaS自身的代号
      • 数据表 paas_etl 更名:luffy_etl
      • 管理后台 /paas/ 开头的路径,改为 /luffy/开头
      • 配置 paas_uri 更名为:faas_uri
  • 安全名单,增加 token 的模式支持

快速入门

了解开发框架与镜像

| --- | --- |

| 开发框架 | |

| org.noear:water.client | 框架:Water 客户端 |

| org.noear:water-solon-plugin | 框架:Water 客户端 for solon(也可用于 Spring Boot 项目) |

| 镜像 | |

| noearorg/waterapi | 镜像:Water 主接口服务 |

| noearorg/watersev | 镜像:Water 后台服务(健康检测;数据监视;消息派发;定时任务等...) |

| noearorg/wateradmin | 镜像:Water 管理控制台(支持LDAP登录) |

| noearorg/waterfaas | 镜像:Water 即时接口服务,提供轻量级FaaS接口服务 |

| noearorg/waterraas | 镜像:Water 规则计算服务,提供轻量级规则计算服务 |

控制台演示站

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

关键持久化说明:

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

代码演示

(1) 配置
  • pom.xml / mevan 配置
<!-- 客户端版本 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>water.client</artifactId>
<version>${water.ver}</version>
</dependency> <!-- solon cloud 集成版本 (也可用于 Spring Boot 项目) -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>water-solon-plugin</artifactId>
<version>${solon.ver}</version>
</dependency>
  • application.yml / 配置说明
solon.app:
name: "wateradmin"
group: "water" solon.cloud.water:
server: "waterapi:9371" #WATER服务地址
config:
load: "test.properties" #默认加载的配置
log:
default: "water_log_admin" #默认日志记录器
(2) 代码
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);
}
});
}
} @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 handler(Event event) throws Exception {
//处理消息...
log.info("我收到消息:" + event.content());
return true;
}
} //配置订阅:关注配置的实时更新
@CloudConfig("demoDb")
public class TestConfigHandler implements CloudConfigHandler {
@Override
public void handler(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("我被调度了");
}
}

最新文章

  1. CSS浮动、定位
  2. 【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)
  3. 概念:P制,N制,奇场,偶场,隔行扫描,逐行扫描
  4. 解决SpringMVC的@ResponseBody返回中文乱码
  5. CSS系列:表达式(Expression)`淘汰`
  6. Android弱网测试中关于网络检测的一些借鉴方法
  7. 【转载】HBase基本概念和hbase shell常用命令用法
  8. webSocket vnc rfb
  9. 传统XmlDocument操作
  10. Block(二)内存管理与其他特性
  11. 利用R语言打造量化分析平台
  12. SHELL自动运行脚本
  13. html逻辑运算符
  14. BZOJ2001 HNOI2010 城市建设
  15. Vue(小案例_vue+axios仿手机app)_图文列表实现
  16. 分享超好用的截动图工具ScreenToGif
  17. 包packages
  18. FTP主动模式与被动模式,及java FTPClient模式设置
  19. &lt;转&gt;jmeter(十四)HTTP请求之content-type
  20. Redis能干啥?细看11种Web应用场景[转]

热门文章

  1. nGrinder 参数使用
  2. Java基础之(十一):方法
  3. 前段之BOM ----DOM
  4. bzoj1407,洛谷2421 NOI2002荒岛野人
  5. 【Java虚拟机9】类加载器之命名空间详解
  6. 【UE4 C++ 基础知识】&lt;8&gt; Delegate 委托
  7. 网格布局GirdLayout在py中的引用,用于多行多列矩阵
  8. 第二次Scrum Metting
  9. [Beta]the Agiles Scrum Meeting 12
  10. PCB中,Solder Mask与Paste Mask有啥区别呢?