当前位置: 首页 > 知识库问答 >
问题:

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

葛昕
2023-03-14

一旦我收到HTTP Get/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
    }

}

预期:

执行以下操作后,在队列中注册消息“hello from sender”:

curl http://localhost/part

实际结果:

发送方法只是继续执行

共有1个答案

百里雅珺
2023-03-14

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

据我所知,您必须使用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文档

 类似资料:
  • 我需要将消息发送到Azure服务总线中的队列。我使用HTTP Post发送消息,但我需要提高我的流量,然后我决定测试AMQP协议。 代码如下: 当我开始这条路线时,通信工作,但是对于骆驼发送给Servicebus的每一条消息,我得到了以下日志: Camel正在为每条消息花费一秒钟的时间发送到Servicebus。这是正常的行为吗?有没有可能让骆驼发送得更快?

  • 我需要从web应用程序向外部JMS服务器发送消息。 我正在使用WebLogic,并且已经配置了一个外部JMS服务器/连接工厂/队列。 关于Java代码,该代码是否也适用于外部JMS服务器? 我试过了,但我错了,但是。。。它应该起作用吗? 谢啦

  • 我有两个独立实例(p1、p2)的生产者应用程序和两个独立实例(c1、c2)的消费者应用程序。 生产者p1连接到exchange,主题为t1,队列名称为name1。 使用者c1连接到exchange,主题为t1,队列名称为name1。 生产者p2连接到exchange,主题为t2,队列名称为name1。 使用者c2连接到exchange,主题为t2,队列名称为name1。 我在RabbitMQ GU

  • 我试图通过驼峰路由将消息放到Weblogic JMS中的队列中。 我的目标是最终配置一个Route以使用来自jms队列的消息,我将早期Route的数据发布到该队列。 这是我的配置: 我的路线如下所示: 我尝试执行此路由时遇到此异常: 我按照以下过程创建了此处提到的队列:https://blogs.oracle.com/soaproactive/entry/how_to_create_a_simpl

  • 我是activeMQ的新手,在将消息从驻留在另一台服务器上的消息生成器推送到activeMQ定义的队列时遇到问题。 我在activeMQ上使用camel routes创建的应用程序中有几个队列。我尝试从另一台服务器上的应用程序对这些队列执行远程JNDI查找。我使用了来自http://activemq.apache.org/jndi-support.html页面的activemq文档片段。 我可以连

  • 我正在构建Windows Phone应用程序,无法使用Microsoft。服务总线。信息。QueueClient类。 然后,我尝试使用Azure Service Bus REST API进行发送,但这需要我构建一个SAS令牌。但要构建SAS令牌,我需要使用Windows。安全密码学。果心MacAlgorithmNames。HmacSha256。此类显示在前面的类型中,但在编译时它不存在。 如何使用