Java Apache Camel自定义组件使用者不调用其他处理器
我在中编写了一个自定义组件。camel成功地创建了它的使用者并使用my URI,但没有调用处理器。 以下是我的消费者代码片段(在Kotlin中): 在消费者中一切都正常,但没有处理器执行。 下面是我如何创建路线的Java Apache Camel自定义组件使用者不调用其他处理器,java,kotlin,apache-camel,Java,Kotlin,Apache Camel,我在中编写了一个自定义组件。camel成功地创建了它的使用者并使用my URI,但没有调用处理器。 以下是我的消费者代码片段(在Kotlin中): 在消费者中一切都正常,但没有处理器执行。 下面是我如何创建路线的 var context = DefaultCamelContext() context.addRoutes(object : RouteBuilder() { override fun configure() { from("myapp://getMessage
var context = DefaultCamelContext()
context.addRoutes(object : RouteBuilder() {
override fun configure() {
from("myapp://getMessage/).process{
println(it.getIn())
}.to("myapp://sendMessage/")
}
})
context.start();
Thread.sleep(100000);
context.stop();
它既不调用流程也不创建我的生产者。(它甚至不调用MyEndpoint::createProducer()
)
当我用另一个端点(如file
)替换我的from
语句时,一切正常
更新:当我从
ScheduledPollConsumer
实现pull
方法扩展我的consumer时,一切都很好。Its,因为我们必须完成consumer的构造函数,并将接收消息的逻辑写入doStart()
在doStart方法中有一个无止境的循环不是一个好主意,在这个循环中,您将劫持当前线程,而当前线程将永远不会终止。相反,您应该设置一个运行此作业的后台线程,从doStart可以设置此线程并让其运行。换句话说,组件“接收”消息的方式是100%特定于组件的,因为每个组件都有自己的方式。在doStop方法中,您就有了停止后台线程并清理任何资源的逻辑
var context = DefaultCamelContext()
context.addRoutes(object : RouteBuilder() {
override fun configure() {
from("myapp://getMessage/).process{
println(it.getIn())
}.to("myapp://sendMessage/")
}
})
context.start();
Thread.sleep(100000);
context.stop();
class SoroushBotConsumer (private val endpoint: MyEndpoint, processor: Processor) : DefaultConsumer(endpoint, processor) {
val objectMapper:ObjectMapper = ObjectMapper();
override fun doStart() {
val client = ClientBuilder.newBuilder().register(SseFeature::class.java).build()
val target = client.target("MY_URL"))
while(true){
var e: EventInput? target.request().get(EventInput::class.java)!!
val inboundEvent = e.read()
val exchange = endpoint.createExchange()
exchange.getIn().body = objectMapper.readValue(inboundEvent.rawData,MessageModel::class.java)
try {
processor.process(exchange)
} catch (e: Exception) {
if (exchange.exception != null) {
exceptionHandler.handleException("Error processing exchange",exchange, exchange.exception)
}
}
}
}
}