Solon 是一個微型的Java開發架構。項目2018年啟動,參考過大量前人作品;核心0.1m的身材,超高的跑分,以及良好的使用體驗。支援:RPC、REST API、MVC、WebSocket、Socket 等多種開發模式。
Solon 強調:克制 + 簡潔 + 開放的原則;力求:更小、更快、更***的體驗。
替代?那有什麼異同之處?
《Solon 特性簡集,相較于 Springboot 有什麼差別?》
《Solon 的架構筆記》
所謂更小:
核心0.1m,最小的接口開發機關0.2m(相較于 Dubbo、Springboot 的依賴包,小到可以乎略不計)
所謂更快:
本機http helloworld測試,Qps可達12萬之多。可參考:《helloworld_wrk_test》
所謂更***:(代碼操控***)
// 除了注解模式之外,還可以按需手動
//
//手動擷取配置(Props 為 Properties 增強版)
Props db = Solon.cfg().getProp("db");
//手動擷取容器裡的Bean
UserService userService = Aop.get(UserService.class);
//手動監聽http post請求
Solon.global().post("/user/update", x-> userService.updateById(x.paramMap()));
//手動添加個RPC服務
Solon.global().add("/rpc/", HelloService.class, true);
//手動擷取一個RPC服務消費端
HelloService helloService = Nami.builder().create(HelloService.class);
//手動為容器添加元件
Aop.wrapAndPut(DemoService.class);
本次版本主要變化:
1、Solon cloud event 增加通道概念,以支援不同消息隊列産品共用
例如一個IoT項目的應用場景:業務消息用RabbitMQ,裝置消息用 MQTT。
配置
solon.app:
group: demo #配置服務使用的預設組
name: helloproducer #發現服務使用的應用名
solon.cloud.mqtt:
server: "tcp://localhost:41883" #mqtt服務位址(預設通道不用命名)
solon.cloud.rabbitmq:
server: localhost:5672 #rabbitmq 服務位址
username: root #rabbitmq 連結賬号
password: 123456 #rabbitmq 連結密碼
event:
channel: "biz" #對事件服務進行通道命名
生産端代碼
@Controller
public class TestController {
@Mapping("/test")
public Object test(String msg) {
//發送預設通道
return CloudClient.event().publish(new Event("hello.demo", msg).qos(1).retained(true));
}
@Mapping("/test2")
public Object test2(String msg) {
//發送到biz通道(發送時,增加 channel 資訊即可)
return CloudClient.event().publish(new Event("hello.demo2", msg).channel("biz"));
}
}
消費端代碼
//訂閱并消費預設通道的事件(為了示範把mqtt的消息訂閱過來了)
@CloudEvent("hello.demo")
public class EVENT_hello_demo implements CloudEventHandler {
@Override
public boolean handler(Event event) throws Throwable {
System.out.println(LocalDateTime.now() + ONode.stringify(event));
return true;
}
}
//訂閱并消費biz通道的事件
@CloudEvent(value = "hello.demo2", channel = "biz")
public class EVENT_hello_demo2 implements CloudEventHandler {
@Override
public boolean handler(Event event) throws Throwable {
System.out.println(LocalDateTime.now() + ONode.stringify(event));
return true;
}
}
2、Solon cloud breaker 斷路器增加動态配置支援
配置
solon.cloud.local:
breaker:
hello: 1 #斷路器名稱與閥值
示範代碼
@Controller
public class DemoController {
//此處安排了個斷路器(即限流器),如果斷路時,會傳回HTTP 403狀态
@CloudBreaker("hello")
@Mapping("/hello")
public String hello() {
return "hello";
}
@Mapping("/reset")
public void reset() {
//重新設定斷路器的閥值(此配置,也可能過配置服務管理;動态更新)
Solon.cfg().setProperty("solon.cloud.local.breaker.hello", "10");
}
}
3、Solon logging 增加支援有格式化或無格式化的異常列印
Solon logging 是基于 slf4j 的個實作方案,内部對接 Solon cloud log service 接口,進而将日志寫到分布式日志服務。
//無格式化場景
log.error("Error: ", e);
//格式化場景
log.error("Error: {}", e);
4、增加路由元件切換支援
public class Demo10App {
public static void main(String[] args) {
Solon.start(Demo10App.class, args, app -> {
Router router = new RouterCustom();
//替換路由器
app.routerSet(router);
});
}
}
5、@Init 增加延時處理機制,并預設為 true
@Component
public class Demo {
@Init
public void init(){
//...
}
}
6、優化session.jwt元件内部機制
附:入門示例
- 項目位址:https://gitee.com/noear/solon
- Solon 入門教程示例:https://gitee.com/noear/solon_demo
- Solon Rpc 入門教程示例:https://gitee.com/noear/solon_rpc_demo
- Solon Cloud 入門教程示例:https://gitee.com/noear/solon_cloud_demo
- Solon 進階教程示例:https://gitee.com/noear/solon_advance_demo