如何在spring api项目中设计RabbitMQ的实现?

问题描述 投票:1回答:1

这将是一个陈述性的问题。我知道什么是rabbitMQ,为什么要用它。我有一个spring API项目,里面有很多API端点。例如,localhost:80do-A,localhost:80do-BNow,我的客户端项目用这些端点创建请求,并提供必要的参数。

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

据我所知,RabbitMQ是API和CLIENT之间的一个中间件,用来存储请求,API将能够逐个检索每个请求,这种方式可以保证在重载时的稳定性和请求不丢失,尤其是在事务性活动时。

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

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

所以,问题是,我应该怎么做才能将我现有的端点转换为rabbit实现的端点?在rabbit实现后,它们是否还在那里,还是我必须全部改变它们,并为它们逐一附加监听器?

spring rabbitmq
1个回答
1
投票

你需要围绕队列来设计你的系统,你需要在任何异步任务执行器中enqueue消息,如 Rqueue 或AMQP。

在基于队列的解决方案中,你将会对所有与API请求相关的有效载荷进行enqueue,这样你就可以毫无问题地处理它们。对于一个例子,你可以记录如下

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

一旦你把这个请求 enqueue,那么你就需要从队列中消费这些请求。消费后你可以采取所有必要的行动。

编辑。

流程:

+------+                              +---------+
|      | ---> ==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
}
© www.soinside.com 2019 - 2024. All rights reserved.