データを受信し、非同期IBM MQ要求を介してデータをチェックするRESTサービスがあります。非同期通信を同期する
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受信機:私は正しい応答を作成するために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?
}
}
コントローラー?
BlockingQueue
をこのように使用することは可能ですか?here?私の場合は、データを区別する必要があります。私はブロッキングキューから最初のデータを取ることはできません。
たとえば、2つのREST要求(データ:abc
およびxyz
)が同時に存在する場合。 MQから得た最初の答えだけでなく、正しい答えに確実に答えることができますか?
また、MQインターフェイスを変更することもできません。
あなたは、この使用してJMSを達成できるかどうか私は知りません。私は数か月前に何かsimillarをしなければならなかったので、これを実現するためにIBM MQクラスを使用しなければなりませんでした。 MQクラスを使用できる場合は、固有のcorrelationIdを設定して使用して、要求との応答を一致させる必要があります。 –
ありがとう、私はそれを調べます。実際には、データそのものには、それを識別するために使用できる固有のIDが含まれています。しかし、どのようにしてRESTコントローラにMQからの応答を待って応答をコントローラに渡すように指示できますか? – deve