2 回答
TA贡献1828条经验 获得超13个赞
在 doStart 方法中设置无限循环并不是一个好主意,您将在其中劫持当前线程,然后该线程将永远不会终止。相反,您应该设置一个运行此作业的后台线程,并且您可以从 doStart 设置此线程并让它运行。换句话说,组件“接收”消息的方式是 100% 特定于组件的,因为每个组件都有自己的方式。然后在 doStop 方法中,您有逻辑来停止该后台线程并清理您的任何资源。
TA贡献1804条经验 获得超7个赞
是的,因为我们必须完成consumer的构造函数,并将接收消息的逻辑写在doStart()
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)
}
}
}
}
}
添加回答
举报
