我正在尝试从另一个 grpc 服务器向 grpc 服务器发送请求。但问题是我似乎对如何访问共享数据没有任何想法。
假设我有 3 个应用程序,app1、app2 和 app3 app2 和 app3 都是用 tonic 用 Rust 编写的。
这是我尝试发送数据的代码:
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`
答案 0 :(得分:0)
ModulesDalManager
没有 connect
。我应该用 ModulesDalManagerClient
代替。所以这条线变成了
let mut dal_client = ModulesDalManager::connect("http://[::1]:50052").await?;
PS:来自 rust 非官方 IRC 频道的 jbg 帮助我解决了这个问题。