[英]Interruption exception with Apache Camel route from/to Apache Kafka
我有一個 Apache Kafka 消息代理的運行實例,我想將其用作駱駝路線的起點/終點。 當開始路線時 - 這似乎工作正常 - 我得到一個InterruptedException
我不知道如何解決這個問題:
09:06:33.840 [Camel (camel-1) thread #1 - KafkaConsumer[OLOG_INBOUND]] DEBUG org.apache.kafka.clients.NetworkClient - [Consumer clientId=KafkaTrafoDataRoute, groupId=8563046a-15fa-48fe-858f-cfd68c7b921c] Completed connection to node -1. Fetching API versions.
09:06:33.840 [Camel (camel-1) thread #1 - KafkaConsumer[OLOG_INBOUND]] DEBUG org.apache.kafka.clients.NetworkClient - [Consumer clientId=KafkaTrafoDataRoute, groupId=8563046a-15fa-48fe-858f-cfd68c7b921c] Initiating API versions fetch from node -1.
09:06:33.849 [Camel (camel-1) thread #1 - KafkaConsumer[OLOG_INBOUND]] WARN org.apache.camel.component.kafka.KafkaConsumer - Interrupted while consuming OLOG_INBOUND-Thread 0 from kafka topic. Caused by: [org.apache.kafka.common.errors.InterruptException - java.lang.InterruptedException]
org.apache.kafka.common.errors.InterruptException: java.lang.InterruptedException
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.maybeThrowInterruptException(ConsumerNetworkClient.java:504)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:287)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:242)
at org.apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.java:218)
at org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.java:230)
at org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:314)
at org.apache.kafka.clients.consumer.KafkaConsumer.updateAssignmentMetadataIfNeeded(KafkaConsumer.java:1218)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1181)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1115)
at org.apache.camel.component.kafka.KafkaConsumer$KafkaFetchRecords.doRun(KafkaConsumer.java:293)
at org.apache.camel.component.kafka.KafkaConsumer$KafkaFetchRecords.run(KafkaConsumer.java:215)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.InterruptedException: null
... 16 common frames omitted
09:06:33.850 [Camel (camel-1) thread #1 - KafkaConsumer[OLOG_INBOUND]] INFO org.apache.camel.component.kafka.KafkaConsumer - Unsubscribing OLOG_INBOUND-Thread 0 from topic OLOG_INBOUND
09:06:33.850 [Camel (camel-1) thread #1 - KafkaConsumer[OLOG_INBOUND]] DEBUG org.apache.kafka.clients.consumer.KafkaConsumer - [Consumer clientId=KafkaTrafoDataRoute, groupId=8563046a-15fa-48fe-858f-cfd68c7b921c] Unsubscribed all topics or patterns and assigned partitions
09:06:33.850 [Camel (camel-1) thread #1 - KafkaConsumer[OLOG_INBOUND]] DEBUG org.apache.camel.component.kafka.KafkaConsumer - Closing OLOG_INBOUND-Thread 0
該路由是從這樣的主例程調用的(注意:我盡量不使用 Spring,因為在我的情況下它會導致太多問題):
public static void main(String[] args) {
CamelContext camelContext = new DefaultCamelContext();
try {
camelContext.addRoutes(new MyKafkaRoute());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
camelContext.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
這是 MyKafkaRoute 的代碼:
public class MyKafkaRoute extends RouteBuilder {
private String consumerEndpoint = "kafka:TOPIC_NAME?" //
+ "brokers=server:port" //
+ "&clientId=myKafkaRoute";
private String emitterEndpoint = "kafka:TOPIC_NAME?" //
+ "brokers=server:port" //
+ "&clientId=myKafkaRoute";
@Override
public void configure() throws Exception {
from(consumerEndpoint) //
.process(... processing ...) //
.to(emitterEndpoint) //
.onException(Exception.class) //
.useOriginalMessage() //
.handled(true) //
.to("stream:out");
}
}
看起來(至少)其中一個端點可能不可用。 除此之外,減少到 from() 的駱駝路線。 ... 。到()。 ... .to() 以更清楚地了解發送給誰的內容。
我的問題的原因是我自己的錯:
在上面的主程序中,我通過以下方式啟動消費者
camelContext.start();
但是在這個語句之后,我的測試程序立即結束導致InterruptedExecption
。 我增強了代碼:
try {
camelContext.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Thread.sleep(5 * 60 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
camelContext.stop();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
現在我可以看到發送給代理的消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.