为什么我的卡夫卡制作者不能发布消息



我无法向kafka主题发布消息,无法从kafka生产者那里获得任何响应,它完全卡住了应用程序

Kafka Producer服务代码

@Service(value = "bookServiceImpl")
public class BookServiceImpl implements IBookService{
@Autowired
private KafkaTemplate<String,Book> kafkaTemplate;
@Override
public String sendBooksDetails(List<Book> booksList) {
String msg = "";
int index = 0;
try {
if (!booksList.isEmpty()){
for (Book book:booksList) {
kafkaTemplate.send(KafkaConstants.TOPIC,book);
}
}
msg = "Books are added to kafka topic successfully";
}catch (Exception e){
e.printStackTrace();
msg = "Unable to publish message";
}
return msg;
}
}

Kafka Producer配置代码

@Configuration
public class KafkaProducerConfig {
@Bean
public ProducerFactory<String, Book> producerFactory(){
Map<String,Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaConstants.HOST);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
@Bean
public KafkaTemplate<String,Book> kafkaTemplate(){
return new KafkaTemplate<>(producerFactory());
}
}

java.lang.IllegalArgumentException:在方法名[0x000x000x00.0x0000x120x000x030x0000#x000#x000x0aproducer-10#x000x12apache-kafka-java0x062.6.0…]中发现无效字符。HTTP方法名必须是令牌

2021-05-30 13:29:13.209[0];39m[32m INFO[0];39m[35m2472[0;39m[2m[nio-8084-esec-2][0;39m]36mo.apache.coyote.http11.Http11Processor[0;39 m[2m:[0];39 m解析HTTP请求标头时出错注意:进一步发生的HTTP请求解析错误将记录在DEBUG级别。

java.lang.IllegalArgumentException:在方法名[0x000x000x00.00001x120x000x030000100010001000x000producer-100001x12apache-kafka-java0x062.6.0…]中发现无效字符。HTTP方法名必须是令牌网址:org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:417(~[tomcat-embed-core-9.0.45.jar:9.0.45]网址:org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261(~[tomcat-embed-core-9.0.45.jar:9.0.45]网址:org.apache.coyote.AbstractProcessorLight.produce(AbstractProcessorLight.java:65(~[tomcat-embed-core-9.0.45.jar:9.0.45]网址:org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893(~[tomcat-embed-core-9.0.45.jar:9.0.45]网址:org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707(~[tomcat-embed-core-9.0.45.jar:9.0.45]网址:org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49(~[tomcat-embed-core-9.0.45.jar:9.0.45]位于java.base/java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1130(~[na:na]位于java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630(~[na:na]在org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61(~[tomcat-embed-core-9.0.45.jar:9.0.45]在java.base/java.lang.Thread.run(Thread.java:832(~[na:na]

[2m22021-05-30 13:29:15.276[0];39m[33m警告[0];39m[35m2472[0];39m--[0;39m[2m[ad|producer-1][0;39m]36morg.apache.kafka.clients.NetworkClient[0];39m][0;399m[Productor clientId=producer-1]引导代理localhost:8084(id:-1 rack:null(已断开连接[2m22021-05-30 13:29:15.531[0;39m[33m警告[0;39 m[35m2472[0];39 m[2m--[0];39米[2m[ad|producer-1][0;39米[36morg.apache.kafka.clients.NetworkClient[0];39 m[2m:[0];39米[producer-clientId=producer-1]引导代理localhost:8084(id:-1 rack:null(已断开

我认为您的问题更多地与kafka是如何设置有关,而不是与您共享的代码有关。我还认为,当您在同一台服务器上部署kafka和spring-boot应用程序时,就不应该再面临这个挑战了。

但是,要解决这个问题,你可以尝试以下步骤:

  1. 检查此文件<kafka-home>/config/server.properties
  2. 取消注释行-listeners=PLAINTEXT://:9092
  3. 取消对线路-advertised.listeners=PLAINTEXT://your.host.name:9092的注释,并将其设置为适当的IP地址,如-advertised.listeners=PLAINTEXT://192.168.1.113:9092
  4. 现在重新启动kafka并测试它

我希望它现在能工作

当您尝试在未启用HTTPS的端点上执行来自客户端的HTTPS请求时,可能会发生此异常。当服务器需要原始数据时,客户端将加密请求数据。

相关内容

最新更新