内容简介:Solon 是一个微型的Java开发框架。项目2018年启动,参考过大量前人作品;内核0.1m的身材,超高的跑分,以及良好的使用体验。支持:RPC、REST API、MVC、WebSocket、Socket 等多种开发模式。 Solon 强调:克制 + ...
Solon 是一个微型的 Java 开发框架。项目2018年启动,参考过大量前人作品;内核0.1m的身材,超高的跑分,以及良好的使用体验。支持:RPC、REST API、MVC、WebSocket、Socket 等多种开发模式。
Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。
替代?那有什么异同之处?
《Solon 特性简集,相较于 Springboot 有什么区别?》
所谓更小:
内核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);
本次版本主要变化:
1、Solon Cloud 增加分布式文件服务定义: CloudFileService
public interface CloudFileService {
InputStream getStream(String bucket, String key) throws CloudFileException;
Result putStream(String bucket, String key, InputStream stream, String streamMime) throws CloudFileException;
InputStream getText(String bucket, String key) throws CloudFileException;
Result putText(String bucket, String key, String text) throws CloudFileException;
...
}
2、Solon Cloud 增加适配组件:aliyun-oss-solon-plugin、aws-s3-solon-plugin(适配 CloudFileService)
以 aliyun-oss-solon-plugin 使用为例:
- 配置:
solon.cloud.aliyun.oss: # 亚马逊则为:solon.cloud.aws.s3
file:
bucket: aaa
endpoint: bbb.xxx.xxx
accessKey: ccc
secretKey: ddd
#可以通过配置服务动态加载,以灵活切换不同的配置
#solon.cloud.water:
# server: water
# config:
# load: xxx_hdfs_cfg
- 代码:
public class DemoService {
public void test() {
String key = "test/" + Utils.guid();
String val = "Hello world!";
//写入数据
Result result = CloudClient.file().putText(key, val);
System.out.println(ONode.stringify(result));
assert result.getCode() == Result.SUCCEED_CODE;
//读取数据
String tmp = CloudClient.file().getText(key);
assert val.equals(tmp);
}
}
3、Solon Cloud 增加适配组件:mqtt-solon-plugin(适配 CloudEventService)
配置示例:
solon.app:
group: demo
name: consumer
solon.cloud.mqtt:
server: "tcp://localhost:41883" #mqtt服务地址
代码示例:
@Controller
public class TestController {
@Mapping("/test")
public Object test(String msg) {
if(Utils.isEmpty(msg)){
msg = "demo2";
}
Event event = new Event("hello.demo", msg).qos(1).retained(true);
return CloudClient.event().publish(event);
}
}
4、增加应用启动事件:AppInitEndEvent
Solon 启动处理顺序:
- 1.实例化 Solon.global() 并加载配置
- 2.加载扩展文件夹
- 3.扫描插件并排序
- 4.运行 initialize 函数
- 5.推送 AppInitEndEvent 事件(新增)
- 6.运行插件
- 7.推送 PluginLoadEndEvent 事件
- 8.导入java bean(@Import)
- 9.扫描并加载java bean
- a.推送 BeanLoadEndEvent 事件
- b.加载渲染印映关系
- c.执行bean加完成事件
- d.推送 AppLoadEndEvent 事件
- e.结束
//订阅示例(通过Solon事件总线提前订阅)
EventBus.subscribe(AppInitEndEvent.class, event->{
System.out.println("app init end...");
});
Solon.start(App.class, args);
5、取消 HandlerLink 类,增加 HandlerPipeline 类
- 此例代码摘自组件 solon.extend.staticfiles :
//切换处理(让静态文件优先)
HandlerPipeline pipeline = new HandlerPipeline();
pipeline.next(new StaticResourceHandler()).next(app.handlerGet());
app.handlerSet(pipeline);
- 此例代码摘自组件 srww.base
SolonServletFilter.onFilterEnd = new HandlerPipeline().next(new BaseLogHandler()).next(new BaseEndHandler());
附:入门示例
- 项目地址:https://gitee.com/noear/solon
- 入门教程示例:https://gitee.com/noear/solon_demo
- RPC入门教程示例:https://gitee.com/noear/solon_rpc_demo
- 进阶教程示例:https://gitee.com/noear/solon_advance_demo
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- looter——超轻量级爬虫框架
- 工具 | 一个轻量级业务中台开发框架
- 轻量级API测试框架Pandaria
- bilibili 轻量级业务框架正式开源
- 轻量级 Web 框架 Gin 结构分析
- Golang轻量级-高并发socket框架
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web Development Recipes
Brian P. Hogan、Chris Warren、Mike Weber、Chris Johnson、Aaron Godin / Pragmatic Bookshelf / 2012-1-22 / USD 35.00
You'll see a full spectrum of cutting-edge web development techniques, from UI and eye candy recipes to solutions for data analysis, testing, and web hosting. Make buttons and content stand out with s......一起来看看 《Web Development Recipes》 这本书的介绍吧!