Spring Boot 轻量替代框架 Solon 1.3.20 发布

栏目: 软件资讯 · 发布时间: 3年前

内容简介: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 有什么区别?》

《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);

本次版本主要变化:

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());

附:入门示例


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法霸权

算法霸权

[美] 凯西·奥尼尔 / 马青玲 / 中信出版集团 / 2018-9-1 / 69.00元

数据科学家凯西•奥尼尔认为,我们应该警惕不断渗透和深入我们生活的数学模型——它们的存在,很有可能威胁到我们的社会结构。 我们生活在一个依赖“算法”的时代,它对我们生活的影响越来越大,我们去哪里上学,我是不是应该贷款买车,我们应该花多少钱来买健康保险,这些都不是由人来决定的,而是由大数据模型来决定的。从理论上来说,这一模型应该让社会更加公平,每一个人的衡量标准都是一样的,偏见是不存在的。 ......一起来看看 《算法霸权》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具