【问题标题】:How to run both server and client using Tonic in Rust?如何在 Rust 中使用 Tonic 运行服务器和客户端?
【发布时间】:2021-05-06 20:35:59
【问题描述】:

我正在尝试从另一个 grpc 服务器向 grpc 服务器发送请求。但问题是我似乎对如何访问共享数据没有任何想法。

假设我有 3 个应用,app1、app2 和 app3 app2 和 app3 都是用 tonic 用 rust 编写的。

  1. 所以 app1 向 app2 发送了一个 grpc 请求 - 这正在工作
  2. app2 接收请求并处理数据 - 这也有效
  3. app2 需要向 app3 发送 grpc 请求 - 我不知道该怎么做
  4. 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`

【问题讨论】:

    标签: rust grpc


    【解决方案1】:

    ModulesDalManager 没有connect。我应该改用ModulesDalManagerClient。所以这条线变成了

    let mut dal_client = ModulesDalManager::connect("http://[::1]:50052").await?;
    

    PS:来自 rust 非官方 IRC 频道的 jbg 帮助我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2022-07-08
      • 1970-01-01
      • 2013-03-09
      • 2022-11-04
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多