这将是一个陈述性的问题。我知道什么是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,设计将是这样的。
所以,问题是,我应该怎么做才能将我现有的端点转换为rabbit实现的端点?在rabbit实现后,它们是否还在那里,还是我必须全部改变它们,并为它们逐一附加监听器?
你需要围绕队列来设计你的系统,你需要在任何异步任务执行器中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
}