Я пытаюсь создать канальный перехватчик, который добавит некоторые данные в заголовки сообщения и, возможно, проверит, есть ли информация в MDC (Mapped Diagnostic Context), хотя вторая часть - это то, что Я не начинаю выяснять.Канальный перехватчик для всех типов каналов
Для первой части, я читал документацию и Саидов рессора интеграции в:
Имейте в виду, что получение() вызовы актуальны только для PollableChannels. На самом деле интерфейс SubscribableChannel даже не определяет метод receive(). Причиной этого является то, что когда сообщение отправляется в SubscribableChannel, оно будет отправлено непосредственно одному или нескольким абонентам в зависимости от типа канала (например, публикация PublishSubscribeChannel отправляет всем своим абонентам). Поэтому методы перехвата preReceive (..) и postReceive (..) вызываются только тогда, когда перехватчик применяется к PollableChannel.
Видя интерфейс, который должен быть реализован для перехватчика:
public interface ChannelInterceptor {
Message<?> preSend(Message<?> message, MessageChannel channel);
void postSend(Message<?> message, MessageChannel channel, boolean sent);
void afterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, Exception ex);
boolean preReceive(MessageChannel channel);
Message<?> postReceive(Message<?> message, MessageChannel channel);
void afterReceiveCompletion(Message<?> message, MessageChannel channel, Exception ex);
}
Я задавался вопросом, какой из всех этих методов является более безопасным местом, где я должен быть перехватывать сообщение? Поскольку некоторые из них не могут быть выполнены в зависимости от типа канала. Например, например, SubscribableChannel, он не будет выполнять получение, поэтому я предполагаю, что preReceive и postReceive никогда не будут вызваны.
Исходя из этого, могу ли я предположить, что preSend является более безопасным местом для этого?