使用Finagle的clientbuilder,如何在外部设置主机?
Using Finagle's clientbuilder, how do I set the host externally?
我正在构建一个指向另一台服务器的简单代理。一切正常,但我需要找到一种方法来最有可能使用 Docker 或某种配置文件在外部设置 ClientBuilder 中的主机。这是我拥有的:
import java.net.InetSocketAddress
import com.twitter.finagle.Service
import com.twitter.finagle.builder.{ServerBuilder, ClientBuilder}
import com.twitter.finagle.http.{Request, Http}
import com.twitter.util.Future
import org.jboss.netty.handler.codec.http._
object Proxy extends App {
val client: Service[HttpRequest, HttpResponse] = {
ClientBuilder()
.codec(Http())
.hosts("localhost:8888")
.hostConnectionLimit(1)
.build()
}
val server = {
ServerBuilder()
.codec(Http())
.bindTo(new InetSocketAddress(8080))
.name("TROGDOR")
.build(client)
}
}
如果您知道这样做的方法或对此有任何想法,请告诉我!
您需要一个文件 server.properties 并将您的配置放入文件中:
HOST=host:8888
现在 docker 使用 docker-入口点 bash 脚本在每次启动时编写配置。添加此脚本并在 Docker 文件中定义环境变量:
$ ENV HOST=myhost
$ ENV PORT=myport
$ ADD docker-entrypoint.sh /docker-entrypoint.sh
$ ENTRYPOINT ["/docker-entrypoint.sh"]
$ CMD ["proxy"]
写出你的docker-entrypoint.sh:
#!/bin/bash -x
set -o errexit
cat > server.properties << EOF
HOST=${HOST}:${PORT}
EOF
if [ "" = 'proxy' ]; then
launch server
fi
exec "$@"
使用您的配置和命令 "proxy":
启动 Docker
$ docker run -e "HOST=host" -e "PORT=port" image proxy
你也可以在不确定你的服务器容器ip地址时进行链接:
$ docker run -e "HOST=mylinkhost" -e "PORT=port" --link myservercontainer:mylinkhost image proxy
如果你想要 运行 这个简单的代理在一个 docker 容器中并动态管理目标主机 ip,你可以尝试通过环境变量传递目标主机 ip 并像这样更改你的代码
import java.net.InetSocketAddress
import com.twitter.finagle.Service
import com.twitter.finagle.builder.{ServerBuilder, ClientBuilder}
import com.twitter.finagle.http.{Request, Http}
import com.twitter.util.Future
import org.jboss.netty.handler.codec.http._
object Proxy extends App {
val target_host = sys.env.get("TARGET_HOST")
val client: Service[HttpRequest, HttpResponse] = {
ClientBuilder()
.codec(Http())
.hosts(target_host.getOrElse("127.0.0.1:8888"))
.hostConnectionLimit(1)
.build()
}
val server = {
ServerBuilder()
.codec(Http())
.bindTo(new InetSocketAddress(8080))
.name("TROGDOR")
.build(client)
}
}
这将使您的代码读取系统环境变量TARGET_HOST
。完成此部分后,您可以尝试通过将以下参数添加到 docker run
命令来启动 docker 容器:
-e "TARGET_HOST=127.0.0.1:8090"
例如docker run -e "TARGET_HOST=127.0.0.1:8090" <docker image> <docker command>
请注意,您可以将 127.0.0.1:8090
更改为您的目标主机。
我正在构建一个指向另一台服务器的简单代理。一切正常,但我需要找到一种方法来最有可能使用 Docker 或某种配置文件在外部设置 ClientBuilder 中的主机。这是我拥有的:
import java.net.InetSocketAddress
import com.twitter.finagle.Service
import com.twitter.finagle.builder.{ServerBuilder, ClientBuilder}
import com.twitter.finagle.http.{Request, Http}
import com.twitter.util.Future
import org.jboss.netty.handler.codec.http._
object Proxy extends App {
val client: Service[HttpRequest, HttpResponse] = {
ClientBuilder()
.codec(Http())
.hosts("localhost:8888")
.hostConnectionLimit(1)
.build()
}
val server = {
ServerBuilder()
.codec(Http())
.bindTo(new InetSocketAddress(8080))
.name("TROGDOR")
.build(client)
}
}
如果您知道这样做的方法或对此有任何想法,请告诉我!
您需要一个文件 server.properties 并将您的配置放入文件中:
HOST=host:8888
现在 docker 使用 docker-入口点 bash 脚本在每次启动时编写配置。添加此脚本并在 Docker 文件中定义环境变量:
$ ENV HOST=myhost
$ ENV PORT=myport
$ ADD docker-entrypoint.sh /docker-entrypoint.sh
$ ENTRYPOINT ["/docker-entrypoint.sh"]
$ CMD ["proxy"]
写出你的docker-entrypoint.sh:
#!/bin/bash -x
set -o errexit
cat > server.properties << EOF
HOST=${HOST}:${PORT}
EOF
if [ "" = 'proxy' ]; then
launch server
fi
exec "$@"
使用您的配置和命令 "proxy":
启动 Docker$ docker run -e "HOST=host" -e "PORT=port" image proxy
你也可以在不确定你的服务器容器ip地址时进行链接:
$ docker run -e "HOST=mylinkhost" -e "PORT=port" --link myservercontainer:mylinkhost image proxy
如果你想要 运行 这个简单的代理在一个 docker 容器中并动态管理目标主机 ip,你可以尝试通过环境变量传递目标主机 ip 并像这样更改你的代码
import java.net.InetSocketAddress
import com.twitter.finagle.Service
import com.twitter.finagle.builder.{ServerBuilder, ClientBuilder}
import com.twitter.finagle.http.{Request, Http}
import com.twitter.util.Future
import org.jboss.netty.handler.codec.http._
object Proxy extends App {
val target_host = sys.env.get("TARGET_HOST")
val client: Service[HttpRequest, HttpResponse] = {
ClientBuilder()
.codec(Http())
.hosts(target_host.getOrElse("127.0.0.1:8888"))
.hostConnectionLimit(1)
.build()
}
val server = {
ServerBuilder()
.codec(Http())
.bindTo(new InetSocketAddress(8080))
.name("TROGDOR")
.build(client)
}
}
这将使您的代码读取系统环境变量TARGET_HOST
。完成此部分后,您可以尝试通过将以下参数添加到 docker run
命令来启动 docker 容器:
-e "TARGET_HOST=127.0.0.1:8090"
例如docker run -e "TARGET_HOST=127.0.0.1:8090" <docker image> <docker command>
请注意,您可以将 127.0.0.1:8090
更改为您的目标主机。