И решение, если я читаю часы-минуты-секунды и получаю в секундах 00 - то мне следует перечитать минуты ещё раз и сделать вывод.
<profiles>
<profile>
<id>java</id>
<properties>
<main.class.name>org.example.JavaTemplate</main.class.name>
<jar.name>java-template</jar.name>
</properties>
</profile>
<profile>
<id>java-kafka-producer</id>
<properties>
<main.class.name>org.example.kafka.JavaKafkaProducerTemplate</main.class.name>
<jar.name>java-kafka-producer-template</jar.name>
</properties>
</profile>
....
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<Main-Class>${main.class.name}</Main-Class>
</manifest>
</archive>
<finalName>${jar.name}</finalName>
</configuration>
</plugin>
java-kafka-producer-template: build
mvn package -DskipTests -Pjava-kafka-producer
cp -f target/java-kafka-producer-template.jar ./bin/
build: clean
mvn install dependency:copy-dependencies
cp -f target/dependency/* ./bin/
rsync src/main/resources/shell/* ./bin
clean:
rm -fr bin/*
mkdir -p bin/
...
@Test
void testMultiproducer() throws InterruptedException {
Sinks.Many<Integer> sinksA = Sinks.many().multicast().onBackpressureBuffer();
Sinks.Many<Integer> sinksB = Sinks.many().multicast().onBackpressureBuffer();
Sinks.Many<Integer> sinksC = Sinks.many().multicast().onBackpressureBuffer();
Sinks.Many<Integer> sinkCommon = Sinks.many()
.multicast()
.onBackpressureBuffer();
sinkCommon.asFlux()
.mergeWith(sinksA.asFlux().delayElements(Duration.ofMillis(100)))
.mergeWith(sinksB.asFlux().delayElements(Duration.ofMillis(200)))
.mergeWith(sinksC.asFlux().delayElements(Duration.ofMillis(300)))
.subscribe(e -> log.info("Element {}", e)); // Your consumer
IntStream.range(0, 100)
.forEach(sinksA::tryEmitNext); // Your producers
IntStream.range(1000, 1100)
.forEach(sinksB::tryEmitNext);
IntStream.range(2000, 2100)
.forEach(sinksC::tryEmitNext);
Thread.sleep(10000); // Is necessary for test only
}
Если рассматривать аналогию с php, то там каждый запрос отправляется с новым подключением к базе.Это не так. Соединение открывается на все время выполнения скрипта, и закрывается автоматически по завершении работы всей цепочки вызовов. В процессе, одно соединение может выполнить стопицот запросов.
На сколько целесообразно "пытаться" держать соединение, или все же просто по аналогии с php?Вот тут точного ответа не дам, однако в пхп стараются избегать персистент соединения, так как пул соединений не бесконечный, и чем быстрее закроется соединение, тем быстрее можно освободить очередь для открытия нового, таким образом с небольшой задержкой можно обслужить очередь из сильно превышающей пул очереди. А с одним соединением начинается жонглирование запросами внутри 1 соединения, что приводит к блокировке кучи пользователей пользующихся 1 соединением с бд, вместо локально тормозящего 1 юзера в случае открытия/закрытия...