使用旧肉桂时,信封未路由到 akka 集群分片 actor-agent.jar

Envelop is not being routed to akka cluster sharded actor while using old cinnamon-agent.jar

我其实是在发经验。也许我会节省别人的时间。

总结:

有时 Akka 集群分片 Actor 不会收到任何路由消息,原因是使用了旧的肉桂代理(我不知道如何但我有证据)。

详情:

我有一个 Akka Java 项目。我们已经将 cinnamon-agent.jar(几个月前)推送到代码库,并且可以在 运行 应用程序使用标准 JVM 选项时指向它:

-javaagent:.local/cinnamon-agent.jar

几天前,我尝试使用上述选项激活 Lightbend Telemetry。突然发现akka cluster sharding的路由机制不行了。目标参与者甚至 ShardRegion.MessageExtractor 实现都没有被执行,即使在 DEBUG 级别,消息也会以某种方式丢失而没有任何日志。

我用了2天时间才知道和肉桂剂有关!但令人惊讶的是,通过用一个新文件(由构建插件获取)更改 jar 文件,问题得到了解决。

使用构建工具插件获取新的肉桂-agent.jar:

Maven:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>3.1.1</version>
  <executions>
    <execution>
      <id>copy</id>
      <phase>compile</phase>
      <goals>
        <goal>copy</goal>
      </goals>
      <configuration>
        <artifactItems>
          <artifactItem>
            <groupId>com.lightbend.cinnamon</groupId>
            <artifactId>cinnamon-agent</artifactId>
            <version>2.15.0</version>
            <overWrite>true</overWrite>
            <destFileName>cinnamon-agent.jar</destFileName>
          </artifactItem>
        </artifactItems>
      </configuration>
    </execution>
  </executions>
</plugin>

Gradle:

// Add the agent to a separate configuration so it doesn't add to the normal class path
configurations {
  agent
}

dependencies {
  agent group: 'com.lightbend.cinnamon', name: 'cinnamon-agent', version: '2.15.0'
}

更多信息:

Lightbend Telemetry Setup

将代理作为 javaagent VM 选项添加到您的 运行:

java -jar -javaagent:.local/cinnamon-agent.jar your-app.jar