Skip to main content

RPC调用

Summer 提供了一种简单的远程调用 Service 的方法,RPC调用可以省去开发controller接口层,实现不同微服务 service 到 service 的直接调用。

提供者

src/default.config.ts
export const RPC_CONFIG: RpcConfig = {
provider: {
accessKey: 'xxxxx'
}
}
import { RpcProvider } from '@summer-js/summer'

@RpcProvider
export class UserRpcService {
getUser(id: number) {
return { id, name: 'John' }
}
getUsers() {
return [
{ id: 1, name: 'John' },
{ id: 2, name: 'Tom' }
]
}
}

调用端

src/default.config.ts
export const RPC_CONFIG: RpcConfig = {
client: {
RPC_SOURCE: {
url: 'https://api.example.com',
accessKey: 'xxxxx'
}
}
}
import { RpcClient } from '@summer-js/summer'

class User {
id: number
name: string
}

@RpcClient('RPC_SOURCE')
export class UserRpcService {
getUser: (id: number) => Promise<User>
getUsers: () => Promise<User[]>
}
提示

服务端与调用端的class名字方法要一致,调用方的返回值需要定义成Promise泛型

// 若调用方class名字无法与服务端不一致,可以在Rpc第二个参数指定服务端的class名字
@RpcClient('RPC_SOURCE','UserRpcService')
export class UserRpcClient {
getUser: (id: number) => Promise<User>
getUsers: () => Promise<User[]>
}

提示

rpc 调用可以对远程端返回的结果进行类型校验,需要将返回 Promise 泛型定义成class类型
若不校验可以定义成interface

相关 Decorators

Decorator作用
@RpcProvider提供RPC服务(可被注入)
@RpcClient调用RPC服务