Получите правильный CamelSmppID на exchange.getOut () - PullRequest
0 голосов
/ 07 сентября 2018

Я интегрирую 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);
...