默认情况下,Lagom服务之间需要共享信息时使用Kafka作为消息代理。在微服务体系架构中,消息代理的使用确保了服务之间不是强耦合的。因此,为了方便,我们在开发环境中嵌入了一个Kafka服务器,这样你就不用担心安装它了。有很多设置和任务可以按照适合您的方式来调整Kafka服务器,让我们来探索一下。

默认端口

默认情况下,Kafka服务器在9092端口上启动。Kafka使用了ZooKeeper,因此在2181端口上也启动了一个ZooKeeper服务器。如果当前的默认端口不适合您,您可以通过在构建中添加以下内容来进行更改。
在Maven根项目pom中:

  1. <plugin>
  2. <groupId>com.lightbend.lagom</groupId>
  3. <artifactId>lagom-maven-plugin</artifactId>
  4. <version>${lagom.version}</version>
  5. <configuration>
  6. <kafkaPort>10000</kafkaPort>
  7. <zookeeperPort>9999</zookeeperPort>
  8. </configuration>
  9. </plugin>

在sbt中:

  1. lagomKafkaPort in ThisBuild := 10000
  2. lagomKafkaZookeeperPort in ThisBuild := 9999

Kafka 配置文件

Kafka服务器可以配置一个可替代的属性文件。默认情况下,Lagom开发环境使用固定的kafka-server.properties配置文件,只允许在服务器上自动创建主题,对于快速入门来说是个不错的默认配置。但如果需要用不同的配置启动Kafka,可以通过添加自己的kafka-server.properties文件到构建中。
在Maven根项目pom中:

  1. <plugin>
  2. <groupId>com.lightbend.lagom</groupId>
  3. <artifactId>lagom-maven-plugin</artifactId>
  4. <version>${lagom.version}</version>
  5. <configuration>
  6. <kafkaPropertiesFile>${basedir}/kafka-server.properties</kafkaPropertiesFile>
  7. </configuration>
  8. </plugin>

在sbt中:

  1. lagomKafkaPropertiesFile in ThisBuild :=
  2. Some((baseDirectory in ThisBuild).value / "project" / "kafka-server.properties")

JVM 选项

Kafka服务运行在一个单独的进程上,并且JVM以合理的内存默认值启动。但是,如果默认的JVM选项不适合您,您可以通过在构建中添加以下内容来覆盖它们。
在Maven根项目pom中:

  1. <plugin>
  2. <groupId>com.lightbend.lagom</groupId>
  3. <artifactId>lagom-maven-plugin</artifactId>
  4. <version>${lagom.version}</version>
  5. <configuration>
  6. <kafkaJvmOptions>
  7. <opt>-Xms256m</opt>
  8. <opt>-Xmx1024m</opt>
  9. </kafkaJvmOptions>
  10. </configuration>
  11. </plugin>

在sbt中:

  1. lagomKafkaJvmOptions in ThisBuild := Seq("-Xms256m", "-Xmx1024m") // these are actually the default jvm options

日志

日志记录被配置为只针对文件。您可以在<your-project-root>/target/lagom-dynamic-projects/lagom-internal-meta-project-kafka/target/log4j_output文件夹中查看Kafka日志文件。

提交日志

Kafka本质上是一个持久的提交日志。您可以在<your-project-root>/target/lagom-dynamic-projects/lagom-internal-meta-project-kafka/target/logs文件夹中找到Kafka持久化的所有数据。

启动和停止

Kafka服务在执行runAll任务时自动启动。但是,有时您可能只想手动启动少数服务,因此您不会使用runAll任务。在这种情况下,可以通过lagom:startKafka maven任务或lagomKafkaStart sbt任务手动启动Kafka服务,然后通过lagom:stopKafkamaven任务或lagomKafkaStop sbt任务停止。

禁用

您可以通过在构建中添加以下内容来禁用嵌入式Kafka服务。
在Maven根项目pom中:

  1. <plugin>
  2. <groupId>com.lightbend.lagom</groupId>
  3. <artifactId>lagom-maven-plugin</artifactId>
  4. <version>${lagom.version}</version>
  5. <configuration>
  6. <kafkaEnabled>false</kafkaEnabled>
  7. </configuration>
  8. </plugin>

在sbt中:

  1. lagomKafkaEnabled in ThisBuild := false
  1. 禁用嵌入式Kafka服务更多是因为,您需要服务连接到一个外部的、本地运行的Kafka实例。

连接到外部的Kafka服务

  1. 可以连接到一个外部的Kafka服务器来代替嵌入式的。您需要做的就是在构建中添加以下内容。<br />在Maven根项目pom中:
  1. <plugin>
  2. <groupId>com.lightbend.lagom</groupId>
  3. <artifactId>lagom-maven-plugin</artifactId>
  4. <version>${lagom.version}</version>
  5. <configuration>
  6. <kafkaAddress>localhost:10000</kafkaAddress>
  7. <kafkaEnabled>false</kafkaEnabled>
  8. </configuration>
  9. </plugin>

在sbt中:

  1. lagomKafkaEnabled in ThisBuild := false
  2. lagomKafkaAddress in ThisBuild := "localhost:10000"

可能已经注意到,上面配置的Kafka服务器实际上是在本地运行的(注意提供的地址中的localhost)。在本例中,配置正在运行的端口就足够了,而不必提供完整的地址。

  1. <plugin>
  2. <groupId>com.lightbend.lagom</groupId>
  3. <artifactId>lagom-maven-plugin</artifactId>
  4. <version>${lagom.version}</version>
  5. <configuration>
  6. <kafkaPort>10000</kafkaPort>
  7. <kafkaEnabled>false</kafkaEnabled>
  8. </configuration>
  9. </plugin>

在sbt中:

  1. lagomKafkaEnabled in ThisBuild := false
  2. lagomKafkaPort in ThisBuild := 10000

假设您的本地Kafka实例在10000端口上运行。