【问题标题】:RabbitMQ in SpringbootSpring Boot 中的 RabbitMQ
【发布时间】:2020-04-18 11:37:29
【问题描述】:

我想听取意见。所以我正在创建一个微服务,它会在客户打开主页时从数据库中获取数据并发送回网站。所以在这种情况下使用 RabbitMQ 会是有益的。我正在考虑在 Spring Boot 微服务的前端和控制器之间添加 RabbitMQ 层。这样就不会错过任何请求。 它是否有助于减少延迟,因为我想要一个非常低的潜在系统

【问题讨论】:

标签: java spring-boot rabbitmq microservices amqp


【解决方案1】:

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

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

建议的解决方案:

如果你想显示来自一个单个数据源的数据,或者一个单一的join可以提供所有数据,那么简单的spring boot MVC就可以了。

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

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

您的队列可用于通知用户他们的任务过程、状态变化等,但为此您必须使用网络套接字。

更新(消息异步示例):

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

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

所以用户可以点击生成报告按钮,然后回家。一切完成后,他会收到一封电子邮件通知。

【讨论】:

  • 你能举个例子吗 - 当你想要做某事(通常是一个长时间执行的动作),但你不想等待结果时,消息用于委托异步操作.
  • 所以你建议前端直接命中控制器端点是上述用例的方法
  • 广告1。就像处理一个大文件一样,这将更新数据库中的多个表。广告2。是的。使用这种方法,您可以创建多个服务,为您的端点提供数据。
  • 所以假设我在网站上获得大约 10k 次点击/秒,那么有没有办法优化你提到的正常方法。还是取决于我如何优化数据库查询,基本上是在服务级别方法中进行优化,这些方法将获取和发送回数据
  • 如果你每秒有 10k 次调用,那么单个应用程序是不够的。您将需要水平扩展它 - 在顶部添加更多应用程序和负载均衡器。它仍然会比消息队列更好。通过这种扫描,kubernetes/hive,AWS beanstock 可以提供帮助。至于优化——每一步都很重要,比如使用 Reactive 方法,执行高效的 SQL 查询等。这可以通过多种方式进行优化。
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多