【发布时间】:2021-05-06 20:35:59
【问题描述】:
我正在尝试从另一个 grpc 服务器向 grpc 服务器发送请求。但问题是我似乎对如何访问共享数据没有任何想法。
假设我有 3 个应用,app1、app2 和 app3 app2 和 app3 都是用 tonic 用 rust 编写的。
- 所以 app1 向 app2 发送了一个 grpc 请求 - 这正在工作
- app2 接收请求并处理数据 - 这也有效
- app2 需要向 app3 发送 grpc 请求 - 我不知道该怎么做
- app3 接收请求并发回回复 - 这是有效的。
这是我尝试发送数据的代码:
async fn list_modules(
&self,
request: Request<ListModulesRequest>,
) -> Result<Response<ListModulesResponse>, Status> {
println!("Got a request: {:?}", request);
let request_data = request.into_inner();
let request = tonic::Request::new(DalListModulesRequest {
request_id: Uuid::new_v4().to_string(),
app_id: APP_ID.to_string(),
});
let mut dal_client = ModulesDalManager::connect("http://[::1]:50052").await?;
let mut response = dal_client.list_modules(request).await?;
let reply = ListModulesResponse {
request_id: response.request_id,
modules: response.modules,
};
Ok(Response::new(reply))
}
我想我不应该像下面这样创建 dal_client,因为它会给我带来错误。但我不明白在哪里创建它。
let mut dal_client = ModulesDalManager::connect("http://[::1]:50052").await?;
有人能给我一些关于如何进行的想法吗?
这是我得到的错误:
error[E0599]: no function or associated item named `connect` found for trait object `(dyn ModulesDalManager + 'static)` in the current scope
--> src/bal/services/module_manager.rs:48:49
|
48 | let mut dal_client = ModulesDalManager::connect("http://[::1]:50052").await?;
| ^^^^^^^ function or associated item not found in `(dyn ModulesDalManager + 'static)`
|
= help: items from traits can only be used if the trait is implemented and in scope
= note: the following traits define an item `connect`, perhaps you need to implement one of them:
candidate #1: `hyper::client::connect::sealed::Connect`
candidate #2: `hyper::client::connect::sealed::ConnectSvc`
【问题讨论】: