java - Spring Boot 中的 RabbitMQ

标签 java spring-boot rabbitmq microservices amqp

我想听听建议。因此,我正在创建一个微服务,每当客户打开主页时,该服务将从数据库获取数据并发送回网站。因此,在这种情况下使用 RabbitMQ 会有好处吗?我正在考虑在 Spring Boot 微服务中的前端和 Controller 之间添加 RabbitMQ 层。这样就不会错过任何请求。 它有助于减少延迟吗,因为我想要一个非常低延迟的系统

最佳答案

这将是对消息队列的滥用。当您想要完成某些操作(通常是长时间执行的操作),但又不想等待结果时,消息用于委托(delegate)异步操作。或者通知其他服务,发生了一些事情,但您不确定它们是否可用。

使用 MQ 将数据获取到网页中,会产生更多有益的问题。 Web应用程序,不提供推送机制(没有爬行或Web套接字)。网页只能向服务器调用数据,服务器本身无法将数据推送到网页。

建议的解决方案:

如果您想显示来自单个数据源的数据,或者单个连接可以提供所有数据,那么简单的 Spring Boot MVC 就可以了。

如果您使用多个数据源(例如表),那么您可以利用 SPA 的优势应用。以最小布局返回主页。然后使用多个 AJAX 调用从数据库中获取数据。这样用户将同时调用所有源,并且调用不会互相阻塞。

如果您想进入微服务,您可以编写一个 node.js 前端应用程序,它将通过 REST api 从您的 spring-boot 应用程序获取数据。

您的队列可用于通知用户其任务进程、状态更改等,但为此您必须使用 Web 套接字。

更新(消息异步示例):

用户想要从所有表生成报告,并将其发送到远程文件存储 (S3)。 从用户的角度来看,这将是一个简单的按钮点击。因为ation会被委托(delegate)给另一个服务并异步执行。用户仅被通知,他的操作已被请求。 您的服务将发布一条消息,请求(由另一个或同一服务)制作此报告,然后推送到数据文件存储。

该过程完成后(甚至几个小时后),新消息将发布到用户服务或电子邮件,表示报告已完成。

因此用户可以单击生成报告按钮,然后回家。当一切完成后,他将收到一封电子邮件通知。

关于java - Spring Boot 中的 RabbitMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59518714/

相关文章:

Spring-AMQP 和直接回复

java - 无法在 RabbitMQ 接收器中将 content_type 从 application/octet-stream 更改为 application/json

java - JPA entityManager.merge 将 LocalDateTime 转换为 SQLServer 2012 DATETIME2

spring - 如何配置自定义 Kafka 反序列化器并使用 KafkaListener 获取使用的 JSON 数据

java - 从 map 列表列表中收集特定键的值 List<String,

spring-boot - 如何在SpringBoot 3中配置zipkin的baseUrl

java - 检查 Java 中的 Alfresco 端点 URL 是否可用

RabbitMQ 直接交换 : default vs.

java - 当数据跨越多个 block 时如何建模分页

java - Groovy在java注释中插入多行字符串