首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在另一个akka http路由中使用akka http客户端使用docker调用akka http路由?

如何在另一个akka http路由中使用akka http客户端使用docker调用akka http路由?
EN

Stack Overflow用户
提问于 2022-11-09 12:07:26
回答 1查看 31关注 0票数 0

我有两个Akka HTTP服务器,它们都运行在码头上和单独的端口上

我已经使用sbt本机包管理器创建了dockerfile。

这是projectA的码头组成。

代码语言:javascript
运行
复制
  akkahttpservice:
    image: projectA-service:0.0.1
    container_name: projectA-service-container
    ports:
      - "8085:8085"

这是projectB的码头组成。

代码语言:javascript
运行
复制
akkahttpservice:
    image: projectB-service:0.0.1
    container_name: projectB-service-container
    ports:
      - "8083:8083"

这是docker ps的输出

代码语言:javascript
运行
复制
CONTAINER ID   IMAGE                         COMMAND                  CREATED         STATUS          PORTS                                                                                  NAMES
71a58c080e7c   projectA-service:0.0.1   "/opt/docker/bin/not…"   5 minutes ago   Up 5 minutes    8084/tcp, 0.0.0.0:8085->8085/tcp, :::8085->8085/tcp                                    projectA-service-container
c08f5700ce3d   projectB-service:0.0.1          "/opt/docker/bin/int…"   22 hours ago    Up 28 minutes   0.0.0.0:8083->8083/tcp, :::8083->8083/tcp                                              projectB-service-container

我想使用akka客户端在projectB中调用projectA路由

这是projectB的路线

代码语言:javascript
运行
复制
def getAdminToken: server.Route =
    path("get-admin-token") {
    post {
  entity(as[JsValue]) {
            json =>
              val userName = json.asJsObject.fields("userName").convertTo[String]
              val userPwd = json.asJsObject.fields("userPwd").convertTo[String]
complete("got the details")
        }
   }
}

下面是projectA的代码,我想在其中调用projectB路由

代码语言:javascript
运行
复制
def addUserInKeyCloak: server.Route = {
    path("add-user-in-keycloak") {
      post {
        entity(as[NotaryUser]) {
          notaryUser =>
            val adminUrl = "http://0.0.0.0:8083/get-admin-token"
        val jsonStr =
          s"""{
             |     "userName":"admin",
             |   "userPwd":"admin"
             |  }""".stripMargin
val request = HttpRequest(HttpMethods.POST, adminUrl, Nil, HttpEntity(ContentTypes.`application/json`, jsonStr.stripMargin.parseJson.toString()))
        val responseFuture = Http(context.system).singleRequest(request)
        complete("result from future")
            
        }
      }
    }
  }

我试过了

代码语言:javascript
运行
复制
val adminUrl = "http://0.0.0.0:8083/get-admin-token"

有例外

代码语言:javascript
运行
复制
Tcp command [Connect(0.0.0.0:8083,None,List(),Some(10 seconds),true)] failed because of java.net.ConnectException: Connection refused (akka.stream.StreamTcpException: Tcp command [Connect(0.0.0.0:8083,None,List(),Some(10 seconds),true)] failed because of java.net.ConnectException: Connection refused)

我试着用不同的URL

代码语言:javascript
运行
复制
val adminUrl = "http://projectB-service-container:8083/get-admin-token"

然后我又得到了另一个例外

代码语言:javascript
运行
复制
Tcp command [Connect(docker-interpret-auth-container:8083,None,List(),Some(10 seconds),true)] failed because of java.net.UnknownHostException: projectB-service-container (akka.stream.StreamTcpException: Tcp command [Connect(projectB-service-container:8083,None,List(),Some(10 seconds),true)] failed because of java.net.UnknownHostException: projectB-service-container)

代码在不使用docker的情况下运行良好,所有上述异常都是在使用docker -组合在docker上运行时发生的。

上面的代码在码头上运行时也可以很好地处理邮递员和卷曲。

EN

回答 1

Stack Overflow用户

发布于 2022-11-09 14:36:13

尝试与主机0.0.0.0一起使用路由只会尝试向同一个容器内的端口发出请求,这不是您要寻找的。您的错误是Connection refused,因为应用程序在不同的容器中运行,因此它们无法使用主机0.0.0.0相互访问。为了使用Docker访问另一个正在运行的容器,请将服务的名称作为主机引用,如下面的docker-compose.yml中所示

代码语言:javascript
运行
复制
version: "3.3"
services:
  akkahttpservicea:
    image: projectA-service:0.0.1
    container_name: projectA-service-container
    ports:
      - "8085:8085"
  akkahttpserviceb:
    image: projectB-service:0.0.1
    container_name: projectB-service-container
    ports:
      - "8083:8083"

例如,在projectA中,使用

代码语言:javascript
运行
复制
val adminUrl = "http://akkahttpserviceb:8083/get-admin-token"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74374635

复制
相关文章

相似问题

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