Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache Camel自定义组件使用者不调用其他处理器_Java_Kotlin_Apache Camel - Fatal编程技术网

Java Apache Camel自定义组件使用者不调用其他处理器

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

我在中编写了一个自定义组件。camel成功地创建了它的使用者并使用my URI,但没有调用处理器。 以下是我的消费者代码片段(在Kotlin中):

在消费者中一切都正常,但没有处理器执行。 下面是我如何创建路线的

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)
                }
            }
        }
    }
}