Я хочу получить ответ синхронизации от jmsTemplate.sendAndReceive:
Message responseMessage = producer.produceAndReceive(gzip, mestype, uploadFile.getName(), uploadFile.getAbsolutePath());
Вызывает yieldAndReceive в другом классе:
@Override
public Message produceAndReceive(final byte[] data, final String type, final String name, final String archivePath) {
jmsTemplate.setReceiveTimeout(20000);
return jmsTemplate.sendAndReceive(SAPPI_EXPORT_QUEUE, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
String msgId = UUIDGen.getUUID();
BytesMessage message = session.createBytesMessage();
message.writeBytes(data);
message.setStringProperty(ISapProducer.IDOC_TYPE, type);
message.setStringProperty(ISapProducer.ORIGIN_FILE_NAME, name);
message.setStringProperty(ISapProducer.MESSAGE_ID, msgId);
message.setStringProperty(ISapProducer.ARCHIVE_PATH, archivePath);
message.setJMSReplyTo(session.createTemporaryQueue());
message.setJMSCorrelationID(msgId);
return message;
}
});
}
после этого шага я предполагаю, что сообщение уже помещено в очередь,У меня есть метод @JmsListener, который «слушает» эту очередь:
@Override
@JmsListener(destination = "myqueue.export")
public void consume(final Message message) throws ServerException {
// some logic here
final HttpStatus httpStatus = client.send(gzip, idocType, documentFileName, messageId, archivePath);
jmsTemplate.send(message.getJMSReplyTo(), new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
Message responseMsg = session.createTextMessage(httpStatus.toString());
responseMsg.setJMSCorrelationID(message.getJMSCorrelationID());
return responseMsg;
}
});
// some logic here
}
Здесь я отправляю http-запрос в удаленную систему и пытаюсь использовать httpStatus при ответном сообщении для метода sendAndReceive ().Но в ответном сообщении всегда ноль.И похоже, что он работает асинхронно.
Как я могу это исправить?