Как читать или публиковать одновременно с ключом разделаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как читать или публиковать одновременно с ключом раздела

Сообщение Anonymous »

Я использую Spring Integration для реализации паттерна транзакционных Outbox. У меня есть код, как это: < /p>

Код: Выделить всё

@Bean
IntegrationFlow eventFlow(
JdbcChannelMessageStore jdbcChannelMessageStore,
ExternalEventPublisher externalEventPublisher,
@Qualifier("transactionManager") TransactionManager transactionManager) {
return IntegrationFlow.from(eventInput())
.channel(eventOutput(jdbcChannelMessageStore))
.handle(
message -> {
ExternalEvent externalEvent = (ExternalEvent) message.getPayload();
externalEventPublisher.publishEvent(externalEvent);
},
e ->
e.poller(
Pollers.fixedDelay(Duration.ofSeconds(1))
.transactional(transactionManager)))
.get();
}
Это отлично работает, если работает externaleventpublisher , сообщение удаляется из базы данных. Если externaleventpublisher не удастся, сообщение остается и повторно. Так что, если ExternaleVentPublisher для публикации нуждается в 200 мс, я не могу публиковать быстрее 5 сообщений в секунду.
Я хотел бы сделать это одновременно, что я могу сделать, изменив Poller на это:

Pollers.fixedDelay(Duration.ofSeconds(1))
.maxMessagesPerPoll(20)
.taskExecutor(taskExecutor())
.transactional(transactionManager)

с помощью этого taskexecutor defined:

Код: Выделить всё

@Bean
TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("event-publisher-");
executor.initialize();
return executor;
}
Однако теперь я теряю заказ сообщений. Конечно, транзакция не может быть нарушена, поэтому, если externaleventpublisher не удастся, сообщение должно оставаться в таблице базы данных.


Подробнее здесь: https://stackoverflow.com/questions/797 ... tition-key
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»