我无法向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应用程序时,就不应该再面临这个挑战了。
但是,要解决这个问题,你可以尝试以下步骤:
- 检查此文件
<kafka-home>/config/server.properties
- 取消注释行-
listeners=PLAINTEXT://:9092
- 取消对线路-
advertised.listeners=PLAINTEXT://your.host.name:9092
的注释,并将其设置为适当的IP地址,如-advertised.listeners=PLAINTEXT://192.168.1.113:9092
- 现在重新启动kafka并测试它
我希望它现在能工作
当您尝试在未启用HTTPS的端点上执行来自客户端的HTTPS请求时,可能会发生此异常。当服务器需要原始数据时,客户端将加密请求数据。