Как изящно выключить Apache Camel Camelspringboottest и избежать java.lang.terruptuptexceptionJAVA

Программисты JAVA общаются здесь
Anonymous
 Как изящно выключить Apache Camel Camelspringboottest и избежать java.lang.terruptuptexception

Сообщение Anonymous »

Я записал тест Apache Camel Spring Boot с ScileStack Mock Services для проведения интеграционного теста для проекта Camel Spring. , регистрирует его и отправляет прямому компоненту. < /p>

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

public void configure() throws Exception {
from("aws2-sqs://sqs-queue")
.routeId("file-upload-route")
.bean(sqsEventProcessor, "processSQSEvent" )
.to("direct:processed-file");
}
< /code>
Тест проходит, но после этого тестовый пример не заканчивается. Он ждет 45 секунд, а затем инициирует жесткий отключение и журнал исключает java.lang.terruptenexception: null 
.
Журнал гласит, что на маршруте есть 2 сообщения в полете, но, но, но, но, но, но, но, но, но, но, но Я проверил, что есть только одно сообщение отправлено и получено. < /P>

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

2025-02-07T19:53:11.661-08:00  INFO 54200 --- [] [ - ShutdownTask] o.a.c.i.engine.DefaultShutdownStrategy   :
Waiting as there are still 2 inflight and pending exchanges to complete, timeout in 10 seconds. Inflights per route: [file-upload-route = 2]
2025-02-07T19:53:12.670-08:00  INFO 54200 --- [] [ - ShutdownTask] o.a.c.i.engine.DefaultShutdownStrategy   :
Waiting as there are still 2 inflight and pending exchanges to complete, timeout in 9 seconds. Inflights per route: [file-upload-route = 2]
...

< /code>
Вот тестовый пример: < /p>
@CamelSpringBootTest
@MockEndpoints("direct:processed-file") //mock the specified endpoint
@SpringBootTest
@TestPropertySource(properties = "spring.lifecycle.timeout-per-shutdown-phase=5s")
public class FileUploadRouteSpringTest {

@Autowired
private ProducerTemplate template;
@EndpointInject("mock:direct:processed-file")
private MockEndpoint mockEndpoint; //inject the mock endpoint as a bean

@BeforeEach
public void setUp() throws Exception {
mockEndpoint.setAssertPeriod(5000);
}

@Test
public void testReceive() throws Exception {

template.sendBody("aws2-sqs://sqs-queue" + "&deleteAfterRead=true", "Hello");
mockEndpoint.expectedMessageCount(1);
mockEndpoint.assertIsSatisfied();
List exchanges = mockEndpoint.getReceivedExchanges();
assertEquals(1, exchanges.size()); // Check if there is exactly one exchange message
}

@AfterEach
public void tearDown() throws Exception {
camelContext.shutdown();
}
}

Я попробовал camelcontext.shutdown (); , а также добавил время-аут-per-shutdown-phase , все же эта ошибка регистрируется.
  • Почему маршрут показывает, что есть 2 сообщения в полете, когда я отправляю только одно сообщение, и оно обрабатывается? < /li>
    Как я могу закончить Тест быстрее, не ожидая, выключите приложение Spring изящно и избегайте исключения в журналах?


Подробнее здесь: https://stackoverflow.com/questions/794 ... d-java-lan

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