Я пытаюсь использовать Spring интеграции SI в своем приложении, я создаю каналы и активаторы услуг программно, у меня есть 2 вопроса, во-первых, я логика обработки сообщений в методе процесса активатора службы, является этот анти-паттерн?
@Component
public abstract class IChannelProcessor {
@Loggable
Logger logger;
public void handleMessage(Message<IMessage> message) {
try {
boolean messagePreprocessed = false, messageProcessed = false, messagePostprocessed = false;
messagePreprocessed = preProcessMessage(message);
if (messagePreprocessed)
messageProcessed = processMessage(message);
if (messageProcessed)
messagePostprocessed = postProcessMessage(message);
} catch (Exception e) {
logger.error(e);
e.printStackTrace();
}
}
public abstract boolean preProcessMessage(Message<IMessage> message);
public abstract boolean processMessage(Message<IMessage> message);
public abstract boolean postProcessMessage(Message<IMessage> message);
}
и позже я подписываюсь на каналы, как показано ниже
channelProcessor = (IChannelProcessor) obj;
serviceActivatorHandler = new ServiceActivatingHandler(channelProcessor, "handleMessage");
String processorChannelName = config.get(processName, Constants.PARAMETER_KEY_CHANNEL);
utils.createInputChannel(processorChannelName).subscribe(serviceActivatorHandler);
означает, что okey или активатор службы должен переслать сообщение другой конечной точке, чтобы выполнить действие.
Второй вопрос: я пытаюсь создать несколько потребителей (потоков) для канала, отмечая, что мне нужно убедиться, что сообщение обрабатывается только один раз.
Я обнаружил, что отправленный в дополнение к taskExecutor может достичь того, как я могу получить подобную вещь программно в Java
<int:channel id="receiverChannel">
<int:dispatcher task-executor="workerThreadExecutor"/>
</int:channel>
<task:executor id="workerThreadExecutor" pool-size="15" queue-capacity="10" rejection-policy="DISCARD" />
<int:service-activator id="worker" ref="workerThread" method="process" input-channel="receiverChannel" />
<bean id="workerThread" class="com.uppi.poc.throttler.WorkerThread" />