我有一个REST服务,它接收一些数据,并通过异步的IBM MQ请求来检查这些数据。
REST控制器:
@RestController
@RequestMapping("/request")
public class RequestController {
@RequestMapping(method = RequestMethod.POST)
public Response postRequest(@RequestBody Request request) {
String data = request.getData();
jmsSender.send(data);
// Now I need the response from MQ
// String mqResponse = ...
if (mqIsValid(mqResponse)) {
return createValidResponse();
}
return createNotValidResponse();
}
}
MQ发送者:
@Service
public class JmsSender {
public void send(String data) {
jmsTemplate.convertAndSend("QUEUE.TO.MQ", data);
}
}
MQ接收器:
@Component
public class JmsReceiver {
@JmsListener(destination = "QUEUE.FROM.MQ, containerFactory = "DefaultJmsListenerContainerFactory")
public void receiveMessage(String message) {
// How to pass the message to the controller?
}
}
如何等待MQ正确的数据以在控制器中创建正确的响应?
是否可以像这里描述的那样使用BlockingQueue
来实现?在我的情况下,我必须区分数据。我不能只从阻塞队列中取第一个数据。
例如,如果有两个REST请求(数据为:abc
和xyz
),如何确保响应正确的答案而不仅仅是从MQ得到的第一个答案?
我也无法更改MQ接口。