内容简介:Solon 是一个微型的Java RPC开发框架。项目从2018年启动以来,参考过大量前人作品;历时两年,3500多次的commit;内核保持0.1m的身材,超高的跑分,良好的使用体验。支持:Rpc、Rest api、Mvc 多种开发模式。 So...
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 |
以上所述就是小编给大家介绍的《Java RPC 框架 Solon 1.3.1 发布,推出 Cloud 接口与配置规范》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Java集合框架——List接口
- 接口自动化测试框架Karate
- Gin框架中使用JWT进行接口认证
- ThinkPHP实现支付宝接口功能 - ThinkPHP框架
- MUi框架ajax请求WebService接口实例
- PhalApi 2.8.1 发布,PHP 开源接口框架
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Web Designer's Idea Book
Patrick Mcneil / How / 2008-10-6 / USD 25.00
The Web Designer's Idea Book includes more than 700 websites arranged thematically, so you can find inspiration for layout, color, style and more. Author Patrick McNeil has cataloged more than 5,000 s......一起来看看 《The Web Designer's Idea Book》 这本书的介绍吧!