2022年Clojure技术栈推荐
19年以来,clojure社区新出了不少好东西,这里做个整理。
1. 构建工具
leiningen
和boot
很好用,但是22年我建议使用clojure cli.
cli更轻量,不仅支持lein
的大部分能力,而且启动十分迅速, 自带许多实用的新功能。
启动速度更快
使用lein
|
|
使用cli, 普通app模板
|
|
支持git依赖
这样你个人未开发完成的库,或者fork出来没PR的库,或者你觉得某个commit最稳定,就能独立使用了。
例如这个库
|
|
支持Tools.build
这是一个较新的feature, 可以使用clj -T:buildtool args
来更方便的使用第三方库作者开发的各种小工具, 不用自己维护各种alias。
例如sean的clj-new, 可以这样使用
|
|
另外,可以使用build.clj
文件来像boot
或者gradle
一样自定义构建过程。
其它的feature感兴趣的读者可自行去官网或者github查看。 建议配合babashka一起用。
2. 推荐的库
clojure社区推荐使用底层库(low level library)
组合成一个自己想要的app,而不是框架(frameworks)
.
这里基于个人经验,推荐一些2022年常用的库
http server相关
- reitit: 芬兰metosin家的http路由库, 建议结合malli使用
- selmer: 模板渲染, 作者是luminus的作者,假如你需要html的话
- undertow: undertow server库的clj桥接版本, 封装了一些clj到java层的胶水代码。
- jetty: jetty或者tomcat, 老牌server了,性能肯定过的去, 玩黑科技比不过undertow或者裸netty等。
类型标注
2022年了,可能clj同学们也意识到了动态类型的维护性问题。所以官方出了个spec来做类型标注。 但是spec实在是难用,这里类型标注仅推荐一个,那就是
- malli: 还是芬兰metosin家的, 使用hiccup语法的数据驱动型校验,功能十分易用强大。
依赖注入
工程一大,依赖真的不好管理,依赖注入目前有component
, mount
和integrant
三种方案,这里仅推荐一个,那就是
- integrant: 一个微框架,适用于数据驱动型架构。这玩意儿基于
multi method
, 相较于其它二者扩展性好很多。而且整个系统各部分可以真正配置化插件化,非常爽。
talking to SQL database
链接数据库这个应该没啥好说的,不推荐conman, 其它随意
连接池建议java是啥就继续用啥,简单封装下完事儿,熟悉带来优雅
调度任务
单机调度任务用用quartz就完事儿了, 分布式的建议java用啥继续用啥, 例如xxl-job
- cronut: 一个quartz的简单封装,比较老了但是能用
缓存
缓存建议直接使用core.cache极其扩展
- redis: 建议自行用几行代码封装一把,实现core.cache的几个protocol
RPC
这个就见仁见智了,偏爱java的可以怼一把dubbo, 可能缺点胶水java代码。
个人十分建议直接上grpc, 并阅读陈天老师的这篇文章protobuf 为经络,gRPC为骨架,这能大大降低动态语言的维护成本。
- protojure: clj原生grpc, 非java版wrapper
APM产品和指标统计
APM这种感觉也没啥好说的,只要支持open tracing的都ok, 可以针对Java做个简单封装
例如这个文件,没几行就写完了上报jaeger的代码
指标统计开源产品可能都是Prometheus+Grafana了,这里推荐个简单的client
- iapetos: Prometheus Java Client的clojure封装
前端
放弃cljs吧,我建议你直接使用React或者Vue, 别折腾了。cljs的报错几乎不可调试。
3. 后记
19年以后clojure社区不知道为啥又死灰复燃了,各种talk和meetup. 高质量库也层出不穷。 如果有本文没有发现的高质量库,欢迎评论里留言一起讨论
期望国内也能出更多clojure大牛和工作岗位~
- 原文作者:Chris Wang
- 原文链接:https://www.sound2gd.wang/post/556f376d/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。