Solon 是一个微型的Java RPC开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的跑分,良好的使用体验。支持:Rpc、Rest api、Mvc 多种开发模式。

Solon 强调:克制 + 简洁 + 开放的原则;力求:更小、更快、更自由的体验。

所谓更小:

内核0.1m,最小开发单位0.2m(相比Dubbo、Springboot项目包,小到可以乎略不计)

所谓更快:

本机helloworld测试,Qps可达12万之多。可参考:《helloworld_wrk_test

所谓更自由:(代码操控自由)

// 除了注入模式之外,还可以按需手动
//
//手动获取配置
Map<String,String> db = Solon.cfg().getMap("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);

本次版本重大变更:

1、发布 Solon cloud 适配接口与配置规范

此规范的设计目的:为第三方微服务组件适配提供统一的接口与配置规范。从而为第三方的微服务组件适配和使用更具标准性和统一性;同时可以让开发者无缝切换不同的第三方组件。

本次发布的接口与配置规范主要包括:

  • 配置服务相关的接口与配置
  • 注册与发现服务相关的接口与配置
  • 事件总线相关的接口与配置
  • 日志总线相关的接口与配置

2、发布配置服务适配组件

组件 说明 备注
consul-solon-plugin 对consul的适配 使用一级目录做为对应的配置组
nacos-solon-plugin 对nacos的适配
water-solon-plugin 对water的适配

特性说明:

  • 1-支持配置启动时加载
solon.app:
group: demo #应用组 //也是配置服务使用的默认组
name: helloapp #应用名 //发现服务使用的应用名 solon.cloud.consul: #consul,可以换成 nacos 或 water
server: 127.0.0.1 #consul 服务地址
config:
loadKey: "test.properties" #启动时加载的配置,并保持时实更新***(会成为Solon.cfg()的一部份)
//
//使用加载的 test.properties 里的配置
//
@Configuration
public class DemoConfig {
@Bean
public DataSource ds(@Inject("${db1}") HikariDataSource ds){
return ds;
}
}
  • 2-支付配置订阅
/**
* 配置订阅(获取配置的时实刷新)
*/
@CloudConfig("demo_cache_header")
public class DemotConfigHandler implements CloudConfigHandler { @Override
public void handler(Config config) {
System.out.println(config.value());
}
}
  • 3-支持云配置直接注入,及自动刷新机制(非单例不需要开启自动刷新机制)
@Controller
public class DemoController {
@CloudConfig(value = "demo_header", autoRefreshed = true)
String demo_header;
}

附演示源码:https://gitee.com/noear/solon_rpc_demo/tree/main/demo21.solon-cloud-consul

3、发布注册与发现服务适配组件

组件 说明
consul-solon-plugin 对consul的适配
nacos-solon-plugin 对nacos的适配
water-solon-plugin 对water的适配

应用示例:

  • 1-Solon rpc 服务注册
solon.app:
group: demo
name: helloapi #发现服务使用的应用名(在Demo,将被NimaClient引用) solon.cloud.consul:
server: 127.0.0.1 #consul服务地址
@Mapping("/rpc/")
@Component(remoting = true)
public class HelloServiceImp implements HelloService {
@Override
public String hello() {
return "remote: hello";
}
}
  • 2-Solon rpc 服务发布
solon.app:
group: demo
name: helloapp solon.cloud.consul:
server: 127.0.0.1
@Controller
public class DemoController {
//
// "helloapi" 对应注册的服务
//
@NamiClient(name = "helloapi")
HelloService helloService; @Mapping("/test")
public String home(String msg) throws Exception {
return helloService.hello();
}
}

附演示源码:https://gitee.com/noear/solon_rpc_demo/tree/main/demo21.solon-cloud-consul

4、发布事件总线服务适配组件

组件 说明 备注
rabbitmq-solon-plugin 对rabbitmq消息队列的适配
rocketmq-solon-plugin 对rocketmq消息队列的适配 定时事件不能超过2小时
water-solon-plugin 对water消息中心的适配

特性说明:

  1. 支持定时事件
  2. 只要订阅了主题,各消费组都能收到
  3. 当前处理失败后逐级延后重试,直到最终成功;但不影响别的消费组

消费组由solon.app.group + solon.app.name 自动组合而成;或通过 solon.cloud.{组件}.event.queue 指定

应用示例:

solon.app:
group: demo #配置服务使用的默认组
name: helloconsumer #发现服务使用的应用名 solon.cloud.rocketmq:
server: localhost:5672 #rabbitmq 服务地址
username: root #rabbitmq 链接账号
password: 123456 #rabbitmq 链接密码
//
//消费者:订阅事件
//
@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)); //如果成功返回true,否则为false(之后会延时再派送)
return true;
}
} //
// 发产者:发布事件
//
@Controller
public class DemoController {
@Mapping("/test")
public Object test(String msg) {
if(Utils.isEmpty(msg)){
msg = "demo2";
} //发布事件
Event event = new Event("hello.demo", msg);
return CloudClient.event().publish(event);
}
}

附演示源码:https://gitee.com/noear/solon_rpc_demo/tree/main/demo30.solon-cloud-rabbitmq

5、发布日志总线服务适配组件

  • water-solon-plugin(对water日志的适配)

特性说明:

  1. 支持元信息描述(可语义操作)
@Controller
public class DemoController { CloudLogger logger = CloudLogger.get(TestController.class); @Mapping("/test")
public void test(String msg) throws Exception {
logger.info("我是好人:(");
logger.info("我不是:{} \n\n {}", "坏人",12);
logger.info(Tags.tag2("打卡"), "我是谁?");
}
}

6、NamiClient 升级,与Solon cloud 规范更好的配合

新属性 说明 示例
url 完整的url地址 http://api.water.org/cfg/get/
group 服务组 water
name 服务名或负载均衡组件名(配合发现服务使用) waterapi
path 路径 /cfg/get/

注:旧的基于表达式的属性 uri,不再使用

附1: 统一的服务适配接口

服务接口 说明 已支持适配组件
CloudConfigService 配置服务接口 consul-solon-plugin、nacos-solon-plugin、water-solon-plugin
CloudDiscoveryService 发现服务接口 consul-solon-plugin、nacos-solon-plugin、water-solon-plugin
CloudEventService 事件总线接口 water-solon-plugin、rabbitmq-solon-plugin、rocketmq-solon-plugin
CloudLogService 日志总线接口 water-solon-plugin

附2:统一的服务配置规范

注:具体配置时,用框架名替代@@符

属性说 说明 框架可使用情况
solon.cloud.@@.server 服务地址(ip:port) nacos、consul、water
solon.cloud.@@.token 链接令牌 consul
solon.cloud.@@.username 链接用户名 nacos
solon.cloud.@@.password 链接密码 nacos
solon.cloud.@@.alarm 造警接收号 water
solon.cloud.@@.config.enable 配置服务启用(默认:true) nacos、consul、water
solon.cloud.@@.config.server 服务地址(ip:port) nacos、consul、water
solon.cloud.@@.config.loadGroup 需要启动时加载的配置组 nacos、water
solon.cloud.@@.config.loadKey 需要启动时加载的Key nacos、consul、wate
solon.cloud.@@.config.refreshInterval 配置刷新间隔 consul
solon.cloud.@@.discovery.enable 注册与发现服务启用(默认:true) nacos、consul、water
solon.cloud.@@.discovery.server 服务地址(ip:port) nacos、consul、water
solon.cloud.@@.discovery.tags 服务标签 consul
solon.cloud.@@.discovery.healthCheckPath 服务健康检查路径 consul、water
solon.cloud.@@.discovery.healthCheckInterval 服务健康检查间隔时间 consul
solon.cloud.@@.discovery.healthDetector 服务健康上报指标 consul
solon.cloud.@@.discovery.refreshInterval 服务发现刷新间隔 consul
solon.cloud.@@.event.enable 事件总线服务(默认:true) water、rabbitmq、rocketmq
solon.cloud.@@.event.server 服务地址(ip:port) water、rabbitmq、rocketmq
solon.cloud.@@.event.exchange 交换机或关系组 rabbitmq、rocketmq
solon.cloud.@@.event.queue 指定队列 rabbitmq、rocketmq
solon.cloud.@@.event.hostname 指定接收域 water
solon.cloud.@@.event.seal 事件签名 water
solon.cloud.@@.log.enable 日志总线服务(默认:true) water
solon.cloud.@@.log.server 服务地址(ip:port) water
solon.cloud.@@.log.default 日志默认记录器 water

附3:项目地址

项目地址: https://gitee.com/noear/solon

Solon rpc 1.3.1 发布,推出Cloud接口与配置规范的更多相关文章

  1. Solon rpc 1.2.18 发布,突出Rpc特性

    Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,3500多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:Rpc. ...

  2. 对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.2 重要发布

    Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...

  3. Solon 1.6.10 重要发布,现在有官网喽!

    关于官网 千呼万唤始出来: https://solon.noear.org .整了一个月多了,总体样子有了...还得不断接着整! 关于 Solon Solon 是一个轻量级应用开发框架.支持 Web. ...

  4. [SDK2.2]Windows Azure Cloud Service (35) 使用VS2013发布Azure Cloud Service

    <Windows Azure Platform 系列文章目录> 好久没有更新BLOG了,今天我们继续Windows Azure相关的内容. 笔者最近把Visual Studio升级到了20 ...

  5. Solon rpc 之 SocketD 协议

    1. 简介 SocketD 是一种二进制的点对点通信协议,是一种新的网络通信第七层协议.旨在用于分布式应用程序中.从这个意义上讲,SocketD可以是RSocket等其他类似协议的替代方案.它的消息协 ...

  6. Solon rpc 之 SocketD 协议 - 消息鉴权模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  7. Solon rpc 之 SocketD 协议 - 消息上报模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  8. Solon rpc 之 SocketD 协议 - 消息应答模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  9. Solon rpc 之 SocketD 协议 - 消息订阅模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

随机推荐

  1. Spring4.3入门 Spring 依赖关系

    Spring4.3入门 Spring 依赖关系 spring的jar包只有20个左右,每个都有相应的功能,一个jar还可能依赖了若干其他jar ,所以,搞清楚它们之间的关系,配置maven依赖就可以简 ...

  2. 论文阅读LR LIO-SAM

    Abstract 紧耦合lidar inertial里程计, 用smoothing和mapping. 1. Introduction 紧耦合lidar-inertial里程计. 紧耦合的lidar i ...

  3. GitLab CI构建SpringBoot-2.3应用

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. 开发规范(二)如何写单元测试 By 阿里

  5. 10分钟带你入门git到github

    git的产生背景 开局先来一个故事吧,故事看完如果不想看枯燥无味的指令,没关系我已经把这篇文章的内容录制成了一个视频,点击文末阅读原文就可以观看.或者说你已经熟练掌握git的使用了,可以直接跳到总结部 ...

  6. node2vec实现源码详解

    一.按照程序执行的顺序,第一步是walker.py中的preprocess_transition_probs()函数 这个函数的作用是生成两个采样预备数据,alias_nodes,alias_edge ...

  7. String 类的常用方法都有那些?

    1.indexOf():返回指定字符的索引. 2.charAt():返回指定索引处的字符. 3.replace():字符串替换. 4.trim():去除字符串两端空白. 5.split():分割字符串 ...

  8. Vue知识点精简汇总

    一. 组件component 1. 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码组件是自定义元素(对象) 2. 定义组件的 ...

  9. 网易163 docker镜像

    $ sudo echo "DOCKER_OPTS=\"--registry-mirror=http://hub-mirror.c.163.com\"" > ...

  10. Kubernetes K8S之通过helm部署metrics-server与HPA详解

    Kubernetes K8S之通过helm部署metrics-server与 Horizontal Pod Autoscaling (HPA)详解 主机配置规划 服务器名称(hostname) 系统版 ...