Solon rpc 之 SocketD 協議 - RPC調用模式

Solon rpc 之 SocketD 協議系列
Solon rpc 之 SocketD 協議 - 概述
Solon rpc 之 SocketD 協議 - 消息上報模式
Solon rpc 之 SocketD 協議 - 消息應答模式
Solon rpc 之 SocketD 協議 - 消息訂閱模式
Solon rpc 之 SocketD 協議 - RPC調用模式
Solon rpc 之 SocketD 協議 - 單連接雙向RPC模式
Solon rpc 之 SocketD 協議 - 消息加密模式html

SocketD 是一種二進制的點對點通訊協議,是一種新的網絡通訊第七層協議。旨在用於分佈式應用程序中。從這個意義上講,SocketD能夠是RSocket等其餘相似協議的替代方案。它的消息協議規範具備異步,背壓的雙向,多路複用,斷線重連,基於消息等特性。暫時只提供Java實現,目前作爲Solon rpc的sockte通道協議。java

本案以簡單的RPC模式爲例演示:(即以業務接口方式調用遠程服務)git

包依賴

<parent>
    <groupId>org.noear</groupId>
    <artifactId>solon-parent</artifactId>
    <version>1.2.18</version>
</parent>
    
<dependencies>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon.boot.socketd.smartsocket</artifactId>
    </dependency>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon.serialization.snack3</artifactId>
    </dependency>

    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>nami.channel.socketd.smartsocket</artifactId>
    </dependency>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>nami.coder.snack3</artifactId>
    </dependency>
</dependencies>

接口定義

Rpc 模式借用了 Nami 作客戶端定義(Nami 是 Solon 伴生框架,定位爲 Rpc 通用客戶端)網絡

@NamiClient("local:/demoe/rpc")
public interface HelloService {
    String hello(String name);
}

服務端

//啓動服務端
public class ServerApp {
    public static void main(String[] args) {
        //啓動Solon容器(SocketD bean&plugin 由solon容器管理)
        Solon.start(ServerApp.class, args, app -> app.enableSocketD(true));
    }
}

//定義遠程服務組件
@Mapping(value = "/demoe/rpc", method = MethodType.SOCKET)
@Component(remoting = true)
public class HelloServiceImpl implements HelloService {
    public String hello(String name) {
        return "name=" + name;
    }
}

客戶端

//啓動客戶端
public class ClientApp {
    public static void main(String[] args) throws Throwable {
        //啓動Solon容器(SocketD bean&plugin 由solon容器管理)
        Solon.start(ClientApp.class, args);
        
        //[客戶端] 調用 [服務端] 的 rpc
        //
        HelloService rpc = SocketD.create("tcp://localhost:28080", HelloService.class);

        System.out.println("RPC result: " + rpc.hello("noear"));
    }
}

附:源碼

https://gitee.com/noear/solon_demo/tree/master/demo28.solon_socketd_rpcapp

相關文章
相關標籤/搜索