首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Dapr调用其他服务

无法使用Dapr调用其他服务
EN

Stack Overflow用户
提问于 2021-05-28 14:59:09
回答 2查看 1.2K关注 0票数 3

我在启动Dapr和运行我的微服务时遇到了很大的问题。每次我尝试调用另一个服务时,它都会返回消息中的500个错误。

代码语言:javascript
复制
client error: the server closed connection before returning the first response byte. Make sure the server returns 'Connection: close' response header before closing the connection

服务和dapr侧写器目前正在我们的开发机器上运行,但在正确部署时将以Kubernetes的形式运行。

当我查看Docker中的dapr容器的日志时,我可以看到在端口443上发现的应用程序和一些初始化消息,但是在那之后就再也没有其他的日志记录了,即使我发出了调用请求。

我有一个名为clients的容器,我在其中调用了一个名为test的API,然后尝试在另一个名为simpleapi的容器中调用Microsoft的示例天气预报API。

我使用swaggerUI调用apis。测试api返回200,但是当我在invoke上放置一个断点时,我可以看到响应是500。

如果我直接使用swaggerui调用气象预报api,它将返回一个带有预期有效载荷的200。

我在容器中运行了Dapr仪表板,它没有显示任何应用程序。

Docker-Compose.yml

代码语言:javascript
复制
version: '3.4'

services:
  clients:
    image: ${DOCKER_REGISTRY-}clients
    container_name: "Clients"
    build:
      context: .
      dockerfile: Clients/Dockerfile
    ports:
      - "50002:50002"
    depends_on:
     - placement
     - database
    networks:
      - platform
  
  clients-dapr:
    image: "daprio/daprd:edge"
    container_name: clients-dapr
    command: [
      "./daprd",
     "-app-id", "clients",
     "-app-port", "443",
     "-placement-host-address", "placement:50006",
     "-dapr-grpc-port", "50002"
     ]
    depends_on:
      - clients
    network_mode: "service:clients"

  simpleapi:
    image: ${DOCKER_REGISTRY-}simpleapi
    build:
      context: .
      dockerfile: SimpleAPI/Dockerfile
    ports:
      - "50003:50003"
    depends_on:
      - placement
    networks:
      - platform

  simpleapi-dapr:
    image: "daprio/daprd:edge"
    container_name: simpleapi-dapr
    command: [
      "./daprd",
     "-app-id", "simpleapi",
     "-app-port", "443",
     "-placement-host-address", "placement:50006",
     "-dapr-grpc-port", "50003"
     ]
    depends_on:
      - simpleapi
    network_mode: "service:simpleapi"

  placement:
    image: "daprio/dapr"
    container_name: placement
    command: ["./placement", "-port", "50006"]
    ports:
      - "50006:50006"
    networks:
      - platform

  dashboard:
    image: "daprio/dashboard"
    container_name: dashboard
    ports:
      - "8080:8080"
    networks:
      - platform

networks:
  platform:

来自客户端API的测试控制器。

代码语言:javascript
复制
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    [HttpGet]
    public async Task<ActionResult> Get()
    {
        var httpClient = DaprClient.CreateInvokeHttpClient();
        var response = await httpClient.GetAsync("https://simpleapi/weatherforecast");
        return Ok();
    }
}

对于我的公司来说,这是一个重大的新项目,如果我们不能尽快做到这一点,我们将不得不放弃Dapr,自己实现一切。

我希望这里有一些显而易见的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-28 15:44:25

其实其实很简单。

我需要告诉dapr使用ssl。客户端-dapr需要-app-ssl参数,因此客户端-dapr应该如下所示( simpleapi-dapr也需要相同的param添加)

代码语言:javascript
复制
clients-dapr:
    image: "daprio/daprd:edge"
    container_name: clients-dapr
    command: [
      "./daprd",
     "-app-id", "clients",
     "-app-port", "443",
     "-app-ssl",
     "-placement-host-address", "placement:50006",
     "-dapr-grpc-port", "50002"
     ]
    depends_on:
      - clients
    network_mode: "service:clients"
票数 1
EN

Stack Overflow用户

发布于 2022-11-04 10:55:58

您可以在没有停靠器的情况下运行特定于服务的端口,并检查dapr是否正常工作。您可以指定http端口和grpc端口。

代码语言:javascript
复制
dapr run `
    --app-id serviceName `
    --app-port 5139 `
    --dapr-http-port 3500 `
    --dapr-grpc-port 50001 `
    --components-path ./dapr-components

如果上述设置有效,则可以使用对接程序进行安装。检查上述解

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67741216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档