カスタムnamerプラグインを使用してlinkerdを実行しようとしていますが、起動に失敗します。io.l5d.fsのソースコードを入手し、すべてのビジネスロジックを切り取って、ハードコードされたアドレスを使用した最小限の例を取得しました。
イニシャライザー:
package com.consg
import io.buoyant.namer.NamerInitializer
class MyInitializer extends NamerInitializer {
val configClass = classOf[MyConfig]
override def configId = "com.consg.MyConfig"
}
object MyInitializer extends MyInitializer
構成:
package com.consg
import com.fasterxml.jackson.annotation.JsonIgnore
import com.twitter.finagle.{Path, Stack}
import io.buoyant.config.types.Directory
import io.buoyant.namer.NamerConfig
case class MyConfig(rootDir: Directory) extends NamerConfig {
@JsonIgnore
override def defaultPrefix: Path = Path.read("/my.namer")
@JsonIgnore
def newNamer(params: Stack.Params) = {
println("params: " + params)
new MyNamer(rootDir.path, prefix)
}
}
ナメル:
package com.consg
import java.nio.file.{Path => NioPath}
import com.twitter.finagle._
import com.twitter.util._
import io.buoyant.namer.EnumeratingNamer
class MyNamer(rootDir: NioPath, prefix: Path) extends EnumeratingNamer {
def lookup(path: Path): Activity[NameTree[Name]] = {
println("lookup path: " + path)
val address1 = Address("127.0.0.1", 7777)
val addr = Addr.Bound(Set(address1), Addr.Metadata.empty)
val varr = Var.apply(addr)
Activity.value(NameTree.Leaf(Name.Bound(varr, path, path)))
}
override def getAllNames: Activity[Set[Path]] = {
println("getAllNames!")
Activity.value(Set.apply(Path.read("animal")))
}
}
build.sbt
name := "plug"
version := "1"
scalaVersion := "2.12.1"
libraryDependencies += "io.buoyant" % "linkerd-core_2.12" % "1.3.2" % "provided"
また、META-INF / services /io.buoyant.namer.NamerInitializerの下にある「com.consg.MyInitializer」サービスを公開しました
次に、プラグインjarを作成し、プラグイン(linkerd-1.3.1 / plugins)の下に配置します。
今私はconfigでlinkerdを実行しようとしています:
namers:
- kind: com.consg.MyConfig
rootDir: disco
routers:
- protocol: http
dtab: /svc => /#/my.namer;
servers:
- port: 8080
そしてその結果、私は次のようになりました。
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.consg.MyConfig' into a subtype of [simple type, class io.buoyant.namer.NamerConfig]: known type ids = [NamerConfig, io.l5d.consul, io.l5d.curator, io.l5d.dnssrv, io.l5d.fs, io.l5d.k8s, io.l5d.k8s.external, io.l5d.k8s.ns, io.l5d.marathon, io.l5d.rewrite, io.l5d.serversets, io.l5d.zkLeader]
したがって、プラグインがまったくロードされていないように見えます。助けが要る。
私の問題は未定義の$ L5D_HOME環境変数だったようです。設定後、プラグインが有効になりました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加