gpt4 book ai didi

java - 如何将RabbitMQ数据返回给客户端(网站用户)

转载 作者:行者123 更新时间:2023-12-02 09:55:43 25 4
gpt4 key购买 nike

我正在研究 RabbitMQ,我想知道如何将其处理的数据返回给客户端(网站用户)。

我正在考虑的流程由一个 REST 端点组成,用户请求处理某些内容,大约需要 5 秒才能完成。因此,当用户请求它时,Web 服务将请求转发到 RabbitMQ 队列,该队列将在 docker 容器中最多有 10 个消费者监听它并准备好处理该请求。到目前为止一切顺利,我可以做到这一点。问题是,消费者处理完之后,如何将数据返回给用户呢?考虑到以下设计,可以使用图像来更好地理解:

换句话说,它会是这样的:

1 - 生产者(其余)接收请求并将消息发送到 RabbitMQ。

2 - RabbitMQ 将消息转发给任何监听的消费者。

3 - 消费者处理数据。

4 - 这就是我迷路的地方。如何将生成的数据返回给客户端(网站用户)?还有一件事,用户将等待请求结束,无需稍后发送。

为了获得更好的细节,我使用java,其余部分是spring boot。

图片: enter image description here

最佳答案

参见Request Reply Messaging .

使用 RabbitTemplatesendAndReceive() 方法之一。

在消费者方面,只需从您的 @RabbitListener 方法返回结果即可。

@RabbitListener(queues = "foo")
public String process(String in) {
return in.toUpperCase();
}

编辑

@SpringBootApplication
public class So56025184Application {

public static void main(String[] args) {
SpringApplication.run(So56025184Application.class, args);
}

@Bean
public ApplicationRunner runner(RabbitTemplate template) {
return args -> {
Scanner scanner = new Scanner(System.in);
String toSend = scanner.nextLine();
while (!"quit".equals(toSend)) {
System.out.println(template.convertSendAndReceive("q1", toSend));
toSend = scanner.nextLine();
}
scanner.close();
};
}

@RabbitListener(queues = "q1")
public String listen(String in) {
return in.toUpperCase();
}

@Bean
public Queue queue() { // RabbitAdmin will add this to the broker
return new Queue("q1");
}

}

您可以使用 Java 序列化(和默认的 SimpleMessageConverter)发送/接收丰富的对象(而不是简单的字符串),或使用 Jackson2JsonMessageConverter 转换为 JSON。

关于java - 如何将RabbitMQ数据返回给客户端(网站用户),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56025184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com