zoukankan      html  css  js  c++  java
  • Spring Boot 轻量替代框架 Solon 1.3.29 发布

    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组件内部机制

    附:入门示例

  • 相关阅读:
    判断ip是内网还是外网, 判断请求来之pc还是mobile
    CentOS6.5(Kernel2.6) Compile PHP5.6
    java设计模式笔记
    Java定时quartz(spring)
    Transforming beans, maps, collections, java arrays and XML to JSON
    java socket通讯交互
    第一个WebService CXF的搭建
    java技术成长之路
    struts2中文乱码
    sql server分页(摘)
  • 原文地址:https://www.cnblogs.com/noear/p/14721646.html
Copyright © 2011-2022 走看看