Apache kafka 无法覆盖lagom kafka参数

Apache kafka 无法覆盖lagom kafka参数,apache-kafka,lagom,Apache Kafka,Lagom,我创建了一个普通的java项目,将lagom kafka客户端的所有依赖项放在类路径上,然后将application.conf放在源文件夹中 application.conf的内容 lagom.broker.kafka { service-name = "" brokers = "127.0.0.1:9092" } 在运行应用程序时,应该使用service name=“”(以便可以使用我的代理路径,而不是查找),但它不起作用 调试时,我发现Kafkanconfig类中的服务名称显示

我创建了一个普通的java项目,将lagom kafka客户端的所有依赖项放在类路径上,然后将application.conf放在源文件夹中

application.conf的内容

lagom.broker.kafka {
  service-name = ""

  brokers = "127.0.0.1:9092"

}
在运行应用程序时,应该使用service name=“”(以便可以使用我的代理路径,而不是查找),但它不起作用

调试时,我发现Kafkanconfig类中的服务名称显示为“kafka_native”

我发现在创建Kafkanconfig时,即将出现的conf对象的源代码中没有我的application.conf

在此之后,我尝试使用以下vm参数覆盖它们:

-Dlagom.broker.kafka.service-name=""
-Dlagom.broker.kafka.brokers="127.0.0.1:9092"
-Dakka.kafka.consumer.kafka-clients.auto.offset.reset="earliest"
它成功了

有人能解释为什么应用程序配置中的重写不起作用吗

这就是我订阅主题的方式

import java.net.URI;
import java.util.concurrent.CompletableFuture;

import com.ameyo.ticketing.ticket.api.TicketingService;
import com.ameyo.ticketing.ticket.api.events.TicketEvent;
import com.lightbend.lagom.javadsl.api.broker.Topic;
import com.lightbend.lagom.javadsl.client.integration.LagomClientFactory;
import com.typesafe.config.ConfigFactory;

import akka.Done;
import akka.stream.javadsl.Flow;

/**
 *
 */

public class Main {
    public static void main(String[] args) {

        String brokers = ConfigFactory.load().getString("lagom.broker.kafka.brokers");
        System.out.println("Initial Value for Brokers " + brokers);
        LagomClientFactory clientFactory = LagomClientFactory.create("legacy-system", Main.class.getClassLoader());
        TicketingService ticketTingService = clientFactory.createClient(TicketingService.class,
                URI.create("http://localhost:11000"));

        Topic<TicketEvent> ticketEvents = ticketTingService.ticketEvents();

        ticketEvents.subscribe().withGroupId("nya13").atLeastOnce(Flow.<TicketEvent> create().mapAsync(1, e -> {
            System.out.println("kuch to aaya");
            return CompletableFuture.completedFuture(Done.getInstance());
        }));

        try {
            Thread.sleep(1000000000);
        } catch (InterruptedException e1) {

        }
    }
}
导入java.net.URI;
导入java.util.concurrent.CompletableFuture;
导入com.ameyo.ticketing.ticket.api.TicketingService;
导入com.ameyo.ticketing.ticket.api.events.TicketEvent;
导入com.lightbend.lagom.javadsl.api.broker.Topic;
导入com.lightbend.lagom.javadsl.client.integration.LagomClientFactory;
导入com.typesafe.config.ConfigFactory;
进口阿克卡。完成;
导入akka.stream.javadsl.Flow;
/**
*
*/
公共班机{
公共静态void main(字符串[]args){
String brokers=ConfigFactory.load().getString(“lagom.broker.kafka.brokers”);
System.out.println(“经纪人初始价值”+经纪人);
LagomClientFactory clientFactory=LagomClientFactory.create(“遗留系统”,Main.class.getClassLoader());
TicketingService TicketingService=clientFactory.createClient(TicketingService.class,
URI.create(“http://localhost:11000"));
Topic ticketEvents=ticketTingService.ticketEvents();
ticketEvents.subscribe().withGroupId(“nya13”).atleastone(Flow.create().mapsync(1,e->{
System.out.println(“kuch to aaya”);
返回CompletableFuture.completedFuture(Done.getInstance());
}));
试一试{
线程。睡眠(100000000);
}捕捉(中断异常e1){
}
}
}

将配置更改为

akka{ 
    lagom.broker.kafka { 
        service-name = "" 
        brokers = "127.0.0.1:9092" 
    }
}

它起作用了

也许你的application.conf放错地方了。你把它放哪儿了?顺便问一下,“普通java项目”是什么意思?这不是一个Lagom项目,而您只是带来了Lagom Kafka API吗?@Renato是的,它不是一个Lagom项目,它是一个遗留系统,我使用LagomClientFactory创建服务存根,application.conf位于正确的位置,因为如果我不放置该文件,java应用程序不会说application.conf未找到。另外,我正在更新关于我是如何订阅的问题,这样您会有一个更好的想法。首先,我会说,application.conf在正在使用的类加载器上不可用。您可以在执行以下操作时快速检查它:Config conf=ConfigFactory.load();config.getString(“lagom.broker.kafka.brokers”)@Renato我尝试了config.getString(“lagom.broker.kafka.brokers”),它给出了正确的字符串“127.0.0.1:9092”,但Kafkanconfig仍然将brokers值设置为“localhost:9092”,然后我还尝试更改了类加载器,最初我使用的是LagomClientFactory类加载器,后来我将其改为主类加载器,但问题仍然存在,我使用的是lagom 1.3。10@Renato在这样放置配置之后:akka{lagom.broker.kafka{service name=”“brokers=“127.0.0.1:9092”}lagom.broker.defaults.kafka{brokers=“127.0.0.1:9092”}}----我的问题得到了解决,我在LagomClientFactory中创建Actor系统时得出了这个结论,代码是:ActorSystem ActorSystem=ActorSystem.create(“lagom client”,configuration.underground().getConfig(“akka”),classLoader);-----------它只从akka获取配置,------------这是期望的行为吗,因为在文档中没有给出