Solon rpc 1.3.1 发布,推出Cloud接口与配置规范
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消息中心的适配 |
特性说明:
- 支持定时事件
- 只要订阅了主题,各消费组都能收到
- 当前处理失败后逐级延后重试,直到最终成功;但不影响别的消费组
消费组由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日志的适配)
特性说明:
- 支持元信息描述(可语义操作)
@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接口与配置规范的更多相关文章
- Solon rpc 1.2.18 发布,突出Rpc特性
Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,3500多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:Rpc. ...
- 对标 Spring Boot & Cloud ,轻量框架 Solon 1.5.2 重要发布
Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...
- Solon 1.6.10 重要发布,现在有官网喽!
关于官网 千呼万唤始出来: https://solon.noear.org .整了一个月多了,总体样子有了...还得不断接着整! 关于 Solon Solon 是一个轻量级应用开发框架.支持 Web. ...
- [SDK2.2]Windows Azure Cloud Service (35) 使用VS2013发布Azure Cloud Service
<Windows Azure Platform 系列文章目录> 好久没有更新BLOG了,今天我们继续Windows Azure相关的内容. 笔者最近把Visual Studio升级到了20 ...
- Solon rpc 之 SocketD 协议
1. 简介 SocketD 是一种二进制的点对点通信协议,是一种新的网络通信第七层协议.旨在用于分布式应用程序中.从这个意义上讲,SocketD可以是RSocket等其他类似协议的替代方案.它的消息协 ...
- Solon rpc 之 SocketD 协议 - 消息鉴权模式
Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...
- Solon rpc 之 SocketD 协议 - 消息上报模式
Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...
- Solon rpc 之 SocketD 协议 - 消息应答模式
Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...
- Solon rpc 之 SocketD 协议 - 消息订阅模式
Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...
随机推荐
- 小白经典CNN论文复现系列(一):LeNet1989
小白的经典CNN复现系列(一):LeNet-1989 之前的浙大AI作业的那个系列,因为后面的NLP的东西我最近大概是不会接触到,所以我们先换一个系列开始更新博客,就是现在这个经典的CNN复现啦(。・ ...
- 广告计价方式:CPM,CPC,CPA
转自知乎链接:https://www.zhihu.com/question/20416888/answer/15076251 1.CPM 收费最科学的办法是按照有多少人看到你的广告来收费.按访问人次收 ...
- [LeetCode]313. Super Ugly Number超级丑数,丑数系列看这一道就行了
丑数系列的题看这一道就可以了 /* 和ugly number2差不多,不过这次的质因子多了,所以用数组来表示质因子的target坐标 target坐标指的是这个质因子此次要乘的前任丑数是谁 */ pu ...
- 这一次,彻底理解XSS攻击
希望读完本文大家彻底理解XSS攻击,如果读完本文还不清楚,我请你吃饭慢慢告诉你~ 话不多说,我们进入正题. 一.简述 跨站脚本(Cross-site scripting,简称为:CSS, 但这会与层叠 ...
- Redis 设计与实现 6:五大数据类型之列表
列表对象有 3 种编码:ziplist.linkedlist.quicklist. ziplist 和 linkedlist 是 3.2 版本之前的编码. quicklist 是 3.2 版本新增的编 ...
- springboot容器启动顺序之@Configuration ContextRefreshedEvent事件初始化 ApplicationRunner
笔者最近遇到一个问题 我们根据自己业务需要 需要首次启动springboot项目时 把数据库数据同步至本地缓存(比如ehcache)但有一个要求 在缓存未载入成功 不允许有流量打入 一开始我们使用 ...
- Centos7上以RPM包方式安装Oracle 18c XE
Centos7上以RPM包方式安装Oracle 18c XE 安装阿里云 YUM 源 https://opsx.alibaba.com/mirror?lang=zh-CN 一.安装oracle数据库 ...
- 零基础学习python
一.python的注释方式: (1)python的单行注释: ctrl+/ # print('Hello World!') 这是当行注释 (2)python的多行注释: ''' ''' ' ' ' ...
- 使用sublime text3搭建Python编辑环境
最近在工作遇到一个难题. 我所在的测试组有一套PC软件前端自动化工程,在进行自动化测试时,需要在一台古老的xp机器上运行,但这台古老的xp机器带给我诸多烦恼,特别是使用Pycharm编辑器时,我遇到了 ...
- 自定义注解,更优雅的使用MP分页功能
分页功能使用 MP的分页功能是通过MyBatis的插件实现的,使用起来也非常简单.下面先介绍下使用方式. step1:配置分页插件 @Configuration @EnableTransactionM ...