Я интегрирую Apache Camel (2.22.0) с Smpp, используя весеннюю загрузку (2.0.3.R), используя java DSL.
Я установил для ExchangePattern значение InOut и SmppConstants.ID с пользовательским значением.
Я использую SmppSim в качестве симулятора Sms-c.
Когда приходит обмен от Smsc и проверяет его на обоих каналах IN и OUT, я понимаю, что CamelSmppID имеет значение null в Out и увеличивает значение int на In. Таким образом, я не могу соотносить смс сообщения.
Я видел, что на этот вопрос ответили много лет назад (2012), выявив проблемы интеграции между компонентом spring и camel-smpp. Ответ был в ExchangePattern установлен в InOut. Я импортирую юнит-тесты Camel-SMPP, и он также завершается с нулевым результатом.
Мой код:
rest("")
.id("sendSms")
.post("/send")
.responseMessage().code(204).message("SMS Sent successfully.").endResponseMessage()
.responseMessage().code(400).message("Invalid Json payload.").endResponseMessage()
.responseMessage().code(404).message("Resource not found.").endResponseMessage()
.responseMessage().code(500).message("Internal Server error.").endResponseMessage()
.description("Send SMS to SMS-C server via SMPP")
.bindingMode(RestBindingMode.json)
.consumes(MediaType.APPLICATION_JSON)
.produces(MediaType.APPLICATION_JSON)
.type(SmsDto.class)
.route().routeId("arrivePostToRestApi")
.to("direct:smsc")
.endRest();
from("direct:smsc")
.routeId("sendSMSToRabbitmq")
.setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(204))
.process(smsDtoToSmsC)
.to("rabbitmq:toSMSC");
from("rabbitmq:toSMSC")
.routeId("sendSMSFromRabbitToSMSc")
.log("${header.CamelSmppId}")
.log("${header." + SmppConstants.DEST_ADDR + "}")
.log("${header." + SmppConstants.SOURCE_ADDR + "}")
.log("${body}")
.log("**************** Sent to SMS-C ******************")
.loadBalance()
.failover(3, false, true, true, Exception.class)
.to(ExchangePattern.InOut, SMSC_1, SMSC_2);
from(SMSC_1).routeId("receiveSMSFromSMSc1").to("direct:sender");
from(SMSC_2).routeId("receiveSMSFromSMSc2").to("direct:sender");
from("direct:sender")
.routeId("sendToRabbitFromSmsc")
.threads(poolSize, maxPoolSize)
.choice()
.when(simple("${header.CamelSmppMessageType} == 'DeliveryReceipt'"))
.process(smscToMessageDto)
.to("rabbitmq:fromSMSC")
.setBody(simple("Message delivery receipt for SMPP ID ${header.CamelSmppId}"))
.to(log)
.otherwise()
.setBody(simple("Unhandled event type: ${header.CamelSmppMessageType}"))
.to(logWarn);