kotlin - Quarkus AMQP 在请求业务逻辑后将消息发送到队列
问题描述
一旦我收到 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
}
}
预期的:
完成后在队列中注册消息“来自发件人的你好”:
curl http://localhost/part
实际结果:
发送方法只是继续执行
解决方案
如果我理解正确,您想调用一个将某些内容放入流中的方法。
据我所知,您必须使用 anEmitter
来执行此操作,请参见例如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文档。
推荐阅读
- java - android studio中的GitHub项目导入导致麻烦
- bash - 在bash中对csv文件中的十进制数字进行排序
- postgresql - 光标
不存在,34000 | Postgres - php - 解析错误 - Wordpress
- r - 在 R 中合并 data.frame
- wordpress - 无法在 WooCommerce 中实例化邮件功能
- actions-on-google - 访问 conv.user.storage Actions on Google 所需的国家/地区
- vuejs2 - 如何在不将所有属性显示为 HTML 属性的情况下使用 v-bind?
- java - Spring System 属性过早解决
- google-sheets - 如何引用 ArrayFormula 中的相对范围?