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组件内部机制北海房价 http://bh.goufang.com/