code: @Override
  	public Message<?> preSend(Message<?> message, MessageChannel channel) {
  		if (emptyMessage(message)) {
  			return message;
  		}
  		Message<?> retrievedMessage = getMessage(message);
  		MessageHeaderAccessor headers = mutableHeaderAccessor(retrievedMessage);
  		TraceContextOrSamplingFlags extracted = this.extractor.extract(headers);
  		Span span = this.threadLocalSpan.next(extracted);
  		MessageHeaderPropagation.removeAnyTraceHeaders(headers,
  				this.tracing.propagation().keys());
  		this.injector.inject(span.context(), headers);
  		if (!span.isNoop()) {
  			span.kind(Span.Kind.PRODUCER).name("send").start();
  			span.remoteServiceName(REMOTE_SERVICE_NAME);
  			addTags(message, span, channel);
  		}
  		if (log.isDebugEnabled()) {
  			log.debug("Created a new span in pre send" + span);
  		}
  		Message<?> outputMessage = outputMessage(message, retrievedMessage, headers);
  		if (isDirectChannel(channel)) {
  			beforeHandle(outputMessage, channel, null);
  		}
  		return outputMessage;
  	}
docs: Starts and propagates {@link Span.Kind#PRODUCER} span for each message sent.