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

Kotlin Quarkus AMQP在请求业务逻辑后向队列发送消息,kotlin,quarkus,Kotlin,Quarkus,一旦收到HTTPGET/Post,我就必须持久化和对象化,然后将消息发送到其他服务正在侦听的队列,并开始执行其他复杂的工作 我目前的问题是,我不能只调用带有@Outgoing(“channel”)注释的方法,我尝试过,只是继续执行该方法而不调用它 有没有一种方法可以调用一个方法来使用Quarkus框架向队列发送JSON负载 PS:我也尝试使用rabbitMQ并切换回ActiveMQ 我遵循Quarkus tuturial的反应式消息传递,并试图在已实现的资源中注册一些内容,但没有成功 @Path

一旦收到HTTPGET/Post,我就必须持久化和对象化,然后将消息发送到其他服务正在侦听的队列,并开始执行其他复杂的工作

我目前的问题是,我不能只调用带有@Outgoing(“channel”)注释的方法,我尝试过,只是继续执行该方法而不调用它

有没有一种方法可以调用一个方法来使用Quarkus框架向队列发送JSON负载

PS:我也尝试使用rabbitMQ并切换回ActiveMQ

我遵循Quarkus tuturial的反应式消息传递,并试图在已实现的资源中注册一些内容,但没有成功

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

}
实际结果:


send方法只是继续执行

如果我理解正确,您希望调用一个方法,将某些内容放入流中

据我所知,您必须使用
发射器来执行此操作,请参见例如


请参阅文档。

Hi,是否可以将各种关注点划分为不同的类别?现在很难弄清楚发生了什么你好,最好解释一下发生了什么:1。fetchParts方法在执行http请求时执行(例如:curl localhost/parts)2。当fetchParts()方法执行时,我需要向队列发送一条消息,这就是它调用send()方法3的原因。“send()”方法会将输出返回到@Outgoing注释中配置的消息队列问题是send()方法正在不间断地执行,而不是在执行fetchParts时。我担心将所有关注点包装到同一个类中可能会导致奇怪的行为。这只是为了测试porpusesSure,我理解,但我担心这种简单的测试方法本身会导致问题。非常感谢!这正是我需要的