Java RPC 框架 Solon 1.3.1 发布,推出Cloud接口与配置规范

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

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

项目地址:

https://gitee.com/noear/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 或 waterserver: 127.0.0.1      #consul 服务地址config:loadKey: "test.properties"  #启动时加载的配置,并保持时实更新***(会成为Solon.cfg()的一部份)
//
//使用加载的 test.properties 里的配置
//
@Configuration
public class DemoConfig {@Beanpublic DataSource ds(@Inject("${db1}") HikariDataSource ds){return ds;}
}
  • 2-支付配置订阅
/*** 配置订阅(获取配置的时实刷新)*/
@CloudConfig("demo_cache_header")
public class DemotConfigHandler implements CloudConfigHandler {@Overridepublic 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: demoname: helloapi    #发现服务使用的应用名(在Demo,将被NimaClient引用)solon.cloud.consul:server: 127.0.0.1   #consul服务地址
@Mapping("/rpc/")
@Component(remoting = true)
public class HelloServiceImp implements HelloService {@Overridepublic 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 {@Overridepublic 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需要启动时加载的Keynacos、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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部