1. 程式人生 > >BootNettyRpc:采用 Netty 實現的 RPC 框架

BootNettyRpc:采用 Netty 實現的 RPC 框架

ofo 文件配置 RR 實現 端口 監控 ble tin cto

技術分享圖片
什麽是 BootNettyRpc?
BootNettyRpc 是一個采用Netty實現的Rpc框架,適用於Spring Boot項目,支持Spring Cloud。 目前支持的版本為Spring Boot 1.5.x,Spring Cloud版本為D和E版本。

怎麽使用?
分為本地啟動和結合Spring Cloud啟動。具體見example 案例,現在以本地案例來說明,Spring Cloud案例省略。

BootNettyRpc 包括Server端和Client端。

Server端
在pom文件中加上依賴:

<dependency>
<groupId>io.github.forezp</groupId>

<artifactId>boot-netty-rpc-core</artifactId>
<version>1.0.5</version>
</dependency>
在Spring Boot啟動工程加上註解@EnableNettyRpc,需要開啟包掃描,不填也可以,會全局掃描,有一點影響啟動速度,比如例子中的ExampleRpcServerApplication:

@SpringBootApplication
@EnableNettyRpc(basePackages = "com.forezp")
public class ExampleRpcServerApplication {

public static void main(String[] args) {
    SpringApplication.run( ExampleRpcServerApplication.class, args );
}

}
在配置文件配置Netty Server的端口和Netty Server的name,該name會作client端的調用的name。

server:
port: 7001

netty.server.name: server
netty.server.port: 6001
寫一個服務,接口如下:

public interface IGreeting {

String sayHello(String name);

}
實現類如下:

@Service
public class Greeting implements IGreeting {@Override
br/>@Override
return "hi "+name;
}
}
Client端
在工程的pom 文件加上一下依賴:

<dependency>
<groupId>io.github.forezp</groupId>
<artifactId>boot-netty-rpc-core</artifactId>
<version>1.0.5</version>
</dependency>
在SpringBoot的啟動類加上@EnableNettyRpc註解,如下:

@SpringBootApplication
@EnableNettyRpc(basePackages = "com.forezp")@RestController
br/>@RestController

public static void main(String[] args) {
    SpringApplication.run( ExampleRpcClientApplication.class, args );
}

}
在Spring Boot配置文件 application.yml,加上以下的配置,其中name為Server端的name,同一個name可以配置多個服務實例,默認使用了輪詢的負載均衡。

netty:
clients:

  • name: server
    host: localhost
    port: 6001
  • name: server
    host: localhost
    port: 6001
    服務調用者需要需要寫一個接口,在接口上寫@RpcClient註解,name必填為服務提供者名,rpcClz必填,為服務提供者的類。

@RpcClient(name = "server", rpcClz = "com.forezp.localrpcserver.api.Greeting")
public interface IGreeting {

String sayHello(String name);

}@Autowired
br/>@Autowired

Object object = greeting.sayHello( "hi" );
聯系我
如果有任何問題和建議,請聯系我,我的郵箱 [email protected]

已經實現的功能
rpc(實現同步、異步調用)
負載均衡
接口線程池隔離
接入Eureka
接入鏈路追蹤
接入監控
接入報警郵箱
優化rpc性能 (需持續優化)
未來計劃
接入多種序列化,做到可配置
自定義協議,trace的index不需要指定
接入consule
支持spring boot 2.0 Spring Cloud F

BootNettyRpc:采用 Netty 實現的 RPC 框架