SOFARPC 是一個高可擴展性、高性能、生產級的 Java RPC 框架。在螞蟻金服 SOFARPC 已經經歷了十多年及五代版本的發展。SOFARPC 致力於簡化應用之間的 RPC 調用,爲應用提供方便透明、穩定高效的點對點遠程服務調用方案。爲了用戶和開發者方便的進行功能擴展,SOFARPC 提供了豐富的模型抽象和可擴展接口,包括過濾器、路由、負載均衡等等。同時圍繞 SOFARPC 框架及其周邊組件提供豐富的微服務治理方案。java
編譯須要 JDK 7 及以上、Maven 3.2.5 及以上。git
運行需求 JDK 6 及以上。github
本文檔將演示瞭如何應用 SOFARPC 進行服務的發佈和引用。 本例將在本地模擬服務端啓動監聽一個端口併發佈一個服務,客戶端引用該服務進行直連調用。編程
您能夠直接在工程下找到本文檔的示例代碼。併發
須要安裝 JDK 6 及以上 和 Maven 3 以上.負載均衡
咱們新建一個 Maven 工程,並引入 SOFARPC 的依賴。框架
<dependency> <groupId>com.alipay.sofa</groupId> <artifactId>sofa-rpc-all</artifactId> <version>5.3.1</version> <dependency>
第一步:建立接口ide
/** * Quick Start demo interface */ public interface HelloService { String sayHello(String string); }
第二步:建立接口實現微服務
/** * Quick Start demo implement */ public class HelloServiceImpl implements HelloService { @Override public String sayHello(String string) { System.out.println("Server receive: " + string); return "hello " + string + " !"; } }
第三步:編寫服務端代碼性能
/** * Quick Start Server */ public class QuickStartServer { public static void main(String[] args) { ServerConfig serverConfig = new ServerConfig() .setProtocol("bolt") // 設置一個協議,默認bolt .setPort(9696) // 設置一個端口,默認12200 .setDaemon(false); // 非守護線程 ProviderConfig<HelloService> providerConfig = new ProviderConfig<HelloService>() .setInterfaceId(HelloService.class.getName()) // 指定接口 .setRef(new HelloServiceImpl()) // 指定實現 .setServer(serverConfig); // 指定服務端 providerConfig.export(); // 發佈服務 } }
第一步:拿到服務端接口
通常服務端會經過jar
的形式將接口類提供給客戶端。而在本例中,因爲服務端和客戶端再一個工程因此跳過。
第二步:編程客戶端代碼
/** * Quick Start client */ public class QuickStartClient { public static void main(String[] args) { ConsumerConfig<HelloService> consumerConfig = new ConsumerConfig<HelloService>() .setInterfaceId(HelloService.class.getName()) // 指定接口 .setProtocol("bolt") // 指定協議 .setDirectUrl("bolt://127.0.0.1:9696"); // 指定直連地址 // 生成代理類 HelloService helloService = consumerConfig.refer(); while (true) { System.out.println(helloService.sayHello("world")); try { Thread.sleep(2000); } catch (Exception e) { } } } }
分別啓動服務端和客戶端,觀察運行效果。
服務端將打印:
Server receive: world
客戶端將打印:
hello world !
更多示例請參考:example
SOFABoot 示例請參考:sofaboot-sample-with-rpc
來自:https://github.com/alipay/sofa-rpc