I'm using *Camel 2.16.0*, *camel-netty4*, and the new dynamic *toD()* feature to send UDP acknowledgements back to the associated UDP client.
In my Camel route that deals with acknowledgements, I have an *AckBackProcessor* that composes the UDP response to be sent back to the UDP client. Right before returning from the *AckBackProcessor* I print out the *NETTY_LOCAL_ADDRESS* and *NETTY_REMOTE_ADDRESS* headers in the Exchange's inMsg and they look as expected. I'm required to use an application-specific well-known UDP source port in the acknowledgement (e.g. *61133*). However, somehow, after the *AckBackProcessor* returns and the *toD()* executes, my tcpdump shows that the UDP source port has changed from *61133* to what looks to be an ephemeral source port. So my question is, with *camel-netty4* and the new dynamic *toD()* feature, how do I specify a UDP source port of my choosing? Here's what my route looks like. It's a SEDA queue: from(ackQueueURI) .setExchangePattern(ExchangePattern.InOnly) .id("setExchangePattern_" + ackQueueRouteId) .routeId(ackQueueRouteId) .startupOrder(ackQueueRouteStartupOrder) .setProperty(Exchange.CHARSET_NAME, ExpressionBuilder.constantExpression(charsetName)) .id("setProperty_" + ackQueueRouteId + "_" + charsetName) // AckBackProcessor formulates the UDP ack and does setHeader("ACK_REQUIRED") to "true" or "false" .process(ackBackProcessor).id(ackBackProcessorId) .choice() .when(header("ACK_REQUIRED").isEqualTo("false")) .to("log:DEV_NULL_LOG?level=OFF") // Drop UDP packet since ack is not required .otherwise() // Otherwise, this UDP request requires an acknowledgement. // Dynamic To does remote address substitution from the in-flight exchange header. .toD(ackToURI).id("toD_" + ackQueueRouteId + "_TO_CLIENT") .end(); Here's the method used to create the acknowledgement URI referenced within the *toD(*): /** * Builds and returns the string containing the acknowledgment to URI. * * @param dest * @param clientPipelineFactoryName * @return The string containing the ackToURI */ private String getAckToURI(Destination dest, String clientPipelineFactoryName) { StringBuilder sb = new StringBuilder(); sb.append("netty4:udp").append(":/${header.CamelNettyRemoteAddress}") .append("?clientPipelineFactory=#").append(clientPipelineFactoryName); String ackOptions = dest.getOptions(); if(ackOptions != null && !ackOptions.isEmpty()) { sb.append(ackOptions); } String ackExtraOptions = dest.getExtraOptions(); if(ackExtraOptions != null && !ackExtraOptions.isEmpty()) { sb.append(ackExtraOptions); } logger.info("getAckToURI(): ackToURI = {}", sb.toString()); return sb.toString(); } -- View this message in context: http://camel.465427.n5.nabble.com/How-to-specify-the-UDP-source-port-in-dynamic-To-toD-tp5774964.html Sent from the Camel - Users mailing list archive at Nabble.com.