Java RPC 框架 Solon 1.3.1 發佈,推出Cloud接口與配置規範

Solon 是一個微型的Java RPC開發框架。項目從2018年啓動以來,參考過大量前人做品;歷時兩年,3500屢次的commit;內核保持0.1m的身材,超高的跑分,良好的使用體驗。支持:Rpc、Rest api、Mvc 多種開發模式。java

Solon 強調:剋制 + 簡潔 + 開放的原則;力求:更小、更快、更自由的體驗。git

項目地址:

https://gitee.com/noear/solonapi

所謂更小:

內核0.1m,最小開發單位0.2m(相比Dubbo、Springboot項目包,小到能夠乎略不計)app

所謂更快:

本機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);

本次版本重大變動:

一、發佈 Solon cloud 適配接口與配置規範

此規範的設計目的:爲第三方微服務組件適配提供統一的接口與配置規範。從而爲第三方的微服務組件適配和使用更具標準性和統一性;同時可讓開發者無縫切換不一樣的第三方組件。框架

本次發佈的接口與配置規範主要包括:ide

  • 配置服務相關的接口與配置
  • 註冊與發現服務相關的接口與配置
  • 事件總線相關的接口與配置
  • 日誌總線相關的接口與配置

二、發佈配置服務適配組件

組件 說明 備註
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-consulpost

三、發佈註冊與發現服務適配組件

組件 說明
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

四、發佈事件總線服務適配組件

組件 說明 備註
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

五、發佈日誌總線服務適配組件

  • 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("打卡"), "我是誰?");
    }
}

六、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
相關文章
相關標籤/搜索