Как вернуть другой код ответа HTTP, когда идемпотентный потребитель Camel обнаруживает повторяющееся сообщение? ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Как вернуть другой код ответа HTTP, когда идемпотентный потребитель Camel обнаруживает повторяющееся сообщение?

Сообщение Anonymous »

Я хочу использовать идемпотентного потребителя Camel, чтобы гарантировать, что сообщение будет использовано только один раз. Я хочу вернуть статус 409, если сообщение дублируется, и 204 в противном случае.
Моя проблема в том, что, хотя код работает правильно, когда дело доходит до запуска маршрута Direct:Hello только один раз, что предполагает, что MemoryIdempotentRepository работает. Но он не дает мне код ответа 409.
Когда сообщение отправляется в первый раз, оно правильно регистрирует свойства Exchange: ${exchange.properties и Hello World!" . Когда одно и то же сообщение приходит во второй раз, оно даже не регистрирует свойства Exchange: ${exchange.properties или обнаружено повторяющееся сообщение!. >
Как заставить его возвращать другой код состояния http в случае, если сообщение уже использовано?
@Override
public void configure() {

onException(Exception.class)
.log("Exception occurred: ${exception.message}")
.handled(true);

from("platform-http:/api/hello?httpMethodRestrict=PUT")
.idempotentConsumer(header("MessageId"))
.idempotentRepository(new MemoryIdempotentRepository())
.log("Exchange Properties: ${exchange.properties}")
.choice()
.when(exchangeProperty(Exchange.DUPLICATE_MESSAGE).isEqualTo(Boolean.TRUE))
.log("Duplicate message detected!")
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpServletResponse.SC_CONFLICT))
.otherwise()
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpServletResponse.SC_NO_CONTENT))
.to("direct:hello")
.end();

from("direct:hello")
.log("Hello World!");
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... mer-detect

Вернуться в «JAVA»