Search code examples
scalaplayframeworkdnskuberneteslagom

unable to use non lagom based static project services with service-locator-dns library


We successfully integrated 'service-locator-dns' in Lagom and deployed in Kubernetes, All services in the Lagom project are properly resolving with Kubernetes SRV requests.

But even statically defined(in build.sbt) non-lagom projects also go through name-translators and srv-translators and finally not resolving.

I have raised the issue for the same in Github https://github.com/lightbend/service-locator-dns/issues/29

Can we avoid this with changes in name-translators itself or do we need to do any extra changes?

It will be very helpful for us if you please provide support or reference any documentation.

Log in kubernetes

log

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

service trait

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)
  }
}

in build.sbt

lagomUnmanagedServices in ThisBuild := Map(
  "premium-calculator" -> "https://test.in",
)

Solution

  • For locating Non-Lagom/Third Party Service in Lagom on Kubernetes, we have to use Lagom's service locator. Like this:

    lagom.services {
      "premium-calculator" = "https://test.in"
    }
    

    Also, we have to use ConfigurationServiceLocator to locate the service:

    if(environment.isProd()) {
      bind(ServiceLocator.class).to(ConfigurationServiceLocator.class);
    }
    

    Here ConfigurationServiceLocator locates the service via configuration (as the name suggests).

    I hope this helps!