Quarkus AMQP在请求业务逻辑后将消息发送到队列

时间:2019-07-23 19:13:43

标签: kotlin quarkus

一旦收到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方法只是继续执行

1 个答案:

答案 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文档。