【问题标题】:How to design RabbitMQ implementation in spring api project?spring api项目中如何设计RabbitMQ实现?
【发布时间】:2020-05-23 15:49:56
【问题描述】:

这将是一个陈述性问题。我知道什么是 rabbitMQ 以及它的用途。 我有一个包含许多 API 端点的 spring API 项目。 例如localhost:80/do-A, localhost:80/do-B 现在,我的客户端项目使用这些带有所需参数的端点创建请求。 在我的 API 项目中,端点看起来像

Map(/do-1)
public Customer DoA(Customer customerObject){
return customer
}

据我所知,RabbitMQ 是 API 和 CLIENT 之间的一个中间件,用于存储请求,API 将能够逐个检索每个请求,这种方法保证了在重负载时的稳定性和不丢失请求,尤其是当涉及交易活动。

如果我实现rabbitMQ,设计会是这样的,

  1. 客户端->创建请求>发送到rabbitMQ,监听rabbitMQ
  2. API 从队列中检索请求,对其进行处理,然后将响应发送到队列。

所以,问题是,我应该怎么做才能将我现有的端点转换为兔子实现的端点?在 rabbit 实现之后它们是否仍然存在,或者我将不得不全部更改它们并为它们一一附加侦听器?

【问题讨论】:

  • 如果客户端项目将消息推送到队列并且服务器监听同一个队列,我认为你不需要API层。
  • 这是一个很好的观点,我试图理解。如果我实现rabbit,是否还需要保留api层
  • 不,你只需要保留服务层。

标签: spring rabbitmq


【解决方案1】:

您需要围绕队列设计系统,您需要在任何异步任务执行器(如Rqueue 或 AMQP)中将消息排入队列。

在基于队列的解决方案中,您会将与 API 请求相关的所有负载排入队列,以便您可以毫无问题地处理它们。 对于示例案例,您可以像这样记录

class Request{
  String URL;
  Map<String, Object> body; // String
}

一旦您将此请求排入队列,您就需要从队列中使用这些请求。消费后您可以采取所有必要的行动。

编辑:

流程:

+------+                              +---------+
|      | ---> ==Request  Queue=== --> |         |
|Client|                              |Consumer |
|      | <--- ==Response Queue=== <-- |         |
+------+                              +---------+

客户端会生成一个带有请求 Id 的 API 请求,消费者会消费请求队列中的请求,处理后,它将响应排队到响应队列中。响应队列条目必须包含除任何其他数据之外的请求 ID,以便客户端可以将响应与请求相关联。

在请求队列中的高级条目看起来像

class Request{
    String id;
    String URL;
    Map<String, Object> body; // String
    // Any other fields
} 

响应队列条目

class Response{
 String id;
 String requestId; 
 // Any other fields
}

【讨论】:

  • 那么我的消费者如何知道队列中有请求。我的意思是我需要连续执行我的消费者方法还是添加一个监听器?
  • 如果你使用的是Rqueue,它非常简单,取决于你需要增加监听器并发的流量。您只需添加几行即可使用 Rqueue 使其正常工作。 github.com/sonus21/rqueue
  • 能否请您定义架构,我的意思是,客户端->生成请求>将其发送到兔子队列 API->从队列中消费请求,生成密钥,将其发送给客户端,处理请求,使用密钥将响应发送到队列 Client>得到密钥,使用密钥在响应通道上侦听是这样的设计吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2022-10-16
  • 2021-08-24
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多