默认情况下,Lagom服务之间需要共享信息时使用Kafka作为消息代理。在微服务体系架构中,消息代理的使用确保了服务之间不是强耦合的。因此,为了方便,我们在开发环境中嵌入了一个Kafka服务器,这样你就不用担心安装它了。有很多设置和任务可以按照适合您的方式来调整Kafka服务器,让我们来探索一下。
默认端口
默认情况下,Kafka服务器在9092端口上启动。Kafka使用了ZooKeeper,因此在2181端口上也启动了一个ZooKeeper服务器。如果当前的默认端口不适合您,您可以通过在构建中添加以下内容来进行更改。
在Maven根项目pom中:
<plugin>
<groupId>com.lightbend.lagom</groupId>
<artifactId>lagom-maven-plugin</artifactId>
<version>${lagom.version}</version>
<configuration>
<kafkaPort>10000</kafkaPort>
<zookeeperPort>9999</zookeeperPort>
</configuration>
</plugin>
在sbt中:
lagomKafkaPort in ThisBuild := 10000
lagomKafkaZookeeperPort in ThisBuild := 9999
Kafka 配置文件
Kafka服务器可以配置一个可替代的属性文件。默认情况下,Lagom开发环境使用固定的kafka-server.properties配置文件,只允许在服务器上自动创建主题,对于快速入门来说是个不错的默认配置。但如果需要用不同的配置启动Kafka,可以通过添加自己的kafka-server.properties
文件到构建中。
在Maven根项目pom中:
<plugin>
<groupId>com.lightbend.lagom</groupId>
<artifactId>lagom-maven-plugin</artifactId>
<version>${lagom.version}</version>
<configuration>
<kafkaPropertiesFile>${basedir}/kafka-server.properties</kafkaPropertiesFile>
</configuration>
</plugin>
在sbt中:
lagomKafkaPropertiesFile in ThisBuild :=
Some((baseDirectory in ThisBuild).value / "project" / "kafka-server.properties")
JVM 选项
Kafka服务运行在一个单独的进程上,并且JVM以合理的内存默认值启动。但是,如果默认的JVM选项不适合您,您可以通过在构建中添加以下内容来覆盖它们。
在Maven根项目pom中:
<plugin>
<groupId>com.lightbend.lagom</groupId>
<artifactId>lagom-maven-plugin</artifactId>
<version>${lagom.version}</version>
<configuration>
<kafkaJvmOptions>
<opt>-Xms256m</opt>
<opt>-Xmx1024m</opt>
</kafkaJvmOptions>
</configuration>
</plugin>
在sbt中:
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:stopKafka
maven任务或lagomKafkaStop
sbt任务停止。
禁用
您可以通过在构建中添加以下内容来禁用嵌入式Kafka服务。
在Maven根项目pom中:
<plugin>
<groupId>com.lightbend.lagom</groupId>
<artifactId>lagom-maven-plugin</artifactId>
<version>${lagom.version}</version>
<configuration>
<kafkaEnabled>false</kafkaEnabled>
</configuration>
</plugin>
在sbt中:
lagomKafkaEnabled in ThisBuild := false
禁用嵌入式Kafka服务更多是因为,您需要服务连接到一个外部的、本地运行的Kafka实例。
连接到外部的Kafka服务
可以连接到一个外部的Kafka服务器来代替嵌入式的。您需要做的就是在构建中添加以下内容。<br />在Maven根项目pom中:
<plugin>
<groupId>com.lightbend.lagom</groupId>
<artifactId>lagom-maven-plugin</artifactId>
<version>${lagom.version}</version>
<configuration>
<kafkaAddress>localhost:10000</kafkaAddress>
<kafkaEnabled>false</kafkaEnabled>
</configuration>
</plugin>
在sbt中:
lagomKafkaEnabled in ThisBuild := false
lagomKafkaAddress in ThisBuild := "localhost:10000"
可能已经注意到,上面配置的Kafka服务器实际上是在本地运行的(注意提供的地址中的localhost)。在本例中,配置正在运行的端口就足够了,而不必提供完整的地址。
<plugin>
<groupId>com.lightbend.lagom</groupId>
<artifactId>lagom-maven-plugin</artifactId>
<version>${lagom.version}</version>
<configuration>
<kafkaPort>10000</kafkaPort>
<kafkaEnabled>false</kafkaEnabled>
</configuration>
</plugin>
在sbt中:
lagomKafkaEnabled in ThisBuild := false
lagomKafkaPort in ThisBuild := 10000
假设您的本地Kafka实例在10000端口上运行。