一旦收到HTTP Get / Post,我必须坚持并反对,然后将消息发送到其他服务正在侦听的队列中,以开始执行其他复杂的工作
我当前的问题是,我不能只调用带有@Outgoing(“ channel”)批注的方法,而是尝试了这种方法,只是继续执行该方法而无需调用
是否有一种方法可以调用使用Quarkus框架将JSON有效负载发送到队列的方法?
PS:我还试图使用RabbitMQ并切换回ActiveMQ
我已经按照Quarkus关于反应式消息传递的教程进行了尝试,并尝试在已实现的资源中注册某些内容,但是没有运气
@Path("/part")
class PartService : PanacheRepository<PartDao>, Logging {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Transactional
fun fetchParts(): List<PartDao> {
val partDao = PartDao(label = "Test", status = PartStatus.INBANK, creatorId = "ghost-007")
partDao.persist()
if (partDao.isPersistent) {
// Send a message to a queue -> PoC
send(partDao)
}
return findAll().list()
}
@Outgoing("part-persisted")
@Transactional
fun send(partDao: PartDao): CompletionStage<AmqpMessage<*>> {
val future = CompletableFuture<AmqpMessage<*>>()
val message = "hello from sender"
// Debug proposes
println("Sending (data): $message")
logger.debug(partDao.toString())
future.complete(AmqpMessage(message))
return future
}
}
预期:
执行以下操作后,在队列中注册消息“来自发件人的问候”:
curl http://localhost/part
实际结果:
send方法只是继续执行
答案 0 :(得分:0)
如果我理解正确,您想调用一个将某些内容放入流中的方法。
据我所知,您必须使用Emitter
进行操作,例如https://github.com/michalszynkiewicz/devoxxpl-demo/blob/master/search/src/main/java/com/example/search/SearchEndpoint.java#L23
请参阅https://smallrye.io/smallrye-reactive-messaging/#_stream文档。