我们成功地在Lagom中集成了“service-locator-dns”,并在Kubernetes中进行了部署。Lagom项目中的所有服务都可以通过Kubernetes SRV请求正确解决。
但是,即使是静态定义(在build.sbt中)的非Lagom项目也要经历name-translators
和srv-translators
并最终无法解析。
我已经在Github https://github.com/lightbend/service-locator-dns/issues/29中提出了同样的问题
我们是否可以通过更改名称翻译器本身来避免这种情况,还是需要做任何额外的更改?
如果您需要提供支持或参考任何文档,它将对我们非常有帮助。
登录kubernetes
日志
Resolving: premium-calculator
Translated premium-calculator to _http-lagom-api._tcp.premium-calculator.staging.svc.cluster.local
Resolving _http-lagom-api._tcp.premium-calculator.staging.svc.cluster.local (SRV)
Message to /10.114.0.10:53: Message(16,<QUERY,RD,SUCCESS>,List(Question(_http-lagom-api._tcp.premium-calculator.staging.svc.cluster.local,SRV,IN)),List(),List(),List())
Received message from /10.114.0.10:53: ByteString(0, 16, -127, -125, 0, 1, 0, 0, 0, 1, 0, 0, 15, 95, 104, 116, 116, 112, 45, 108, 97, 103, 111, 109, 45, 97, 112, 105, 4, 95, 116, 99, 112, 18, 112, 114, 101, 109, 105, 117, 109, 45, 99, 97, 108, 99, 117, 108, 97, 116, 111, 114, 7, 115, 116, 97, 103, 105, 110, 103, 3, 115, 118, 99, 7, 99, 108, 117, 115, 116, 101, 114, 5, 108, 111, 99, 97, 108, 0, 0, 33, 0, 1, 7, 99, 108, 117, 115, 116, 101, 114, 5, 108, 111, 99, 97, 108, 0, 0, 6)... and [76] more
Decoded: Message(16,<AN,QUERY,RD,RA,NAME_ERROR>,Vector(Question(_http-lagom-api._tcp.premium-calculator.staging.svc.cluster.local,SRV,IN)),Vector(),Vector(UnknownRecord(cluster.local,60,6,1,ByteString(2, 110, 115, 3, 100, 110, 115, 7, 99, 108, 117, 115, 116, 101, 114, 5, 108, 111, 99, 97, 108, 0, 10, 104, 111, 115, 116, 109, 97, 115, 116, 101, 114, 7, 99, 108, 117, 115, 116, 101, 114, 5, 108, 111, 99, 97, 108, 0, 90, -80, -107, 80, 0, 0, 112, -128, 0, 0, 28, 32, 0, 9, 58, -128, 0, 0, 0, 60))),Vector())
Resolved: Vector()
java.lang.IllegalStateException: Service premium-calculator was not found by service locator
服务特质
trait PremiumCalculator extends Service {
def getPremiums(channelName: String): ServiceCall[JsValue, JsValue]
override final def descriptor = {
import Service._
named("premium-calculator")
.withCalls(
restCall(Method.POST, "/api/v2/premium/:channelName", getPremiums _))
.withAutoAcl(true)
}
}
在build.sbt中
lagomUnmanagedServices in ThisBuild := Map(
"premium-calculator" -> "https://test.in",
)
最佳答案
要在Kubernetes上的Lagom中定位非Lagom /第三方服务,我们必须使用Lagom的服务定位器。像这样:
lagom.services {
"premium-calculator" = "https://test.in"
}
另外,我们必须使用
ConfigurationServiceLocator
定位服务:if(environment.isProd()) {
bind(ServiceLocator.class).to(ConfigurationServiceLocator.class);
}
在这里
ConfigurationServiceLocator
通过配置查找服务(顾名思义)。我希望这有帮助!