Spring Boot 3 迁移时,出现 org.apache.camel.CamelExchangeException: Exchange is not part of a saga

问题描述 投票:0回答:1

在将我的应用程序的 Spring Boot 版本升级到 3.0.7,将 Camel 升级到 4.0.1 时,我开始收到 CamelExchangeException 消息,说 Exchange 不是 saga 的一部分,用于我的一项测试。

org.apache.camel.CamelExecutionException:在交易所执行期间发生异常:Exchange[06B60F51AF94F83-0000000000000000]

at org.apache.camel.CamelExecutionException.wrapCamelExecutionException(CamelExecutionException.java:45)
at org.apache.camel.support.ExchangeHelper.extractResultBody(ExchangeHelper.java:655)
at org.apache.camel.impl.engine.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:591)
at org.apache.camel.impl.engine.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:587)
at org.apache.camel.impl.engine.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:189)
at org.apache.camel.impl.engine.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:195)
at camel.saga.MemberCashCreateOrderSagaRouteTest.testMemberCashOrderWorkflow(MemberCashCreateOrderSagaRouteTest.java:112)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57)
at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)

由 org.apache.camel.CamelExchangeException 引起:Exchange 不是传奇的一部分。交换[] 在 org.apache.camel.processor.saga.MandatorySagaProcessor.lambda$process$3(MandatorySagaProcessor.java:41) 在 org.apache.camel.processor.saga.SagaProcessor.ifNotException(SagaProcessor.java:146) 在 org.apache.camel.processor.saga.SagaProcessor.ifNotException(SagaProcessor.java:132) 在 org.apache.camel.processor.saga.MandatorySagaProcessor.lambda$process$4(MandatorySagaProcessor.java:39) 在 java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) 在 java.base/java.util.concurrent.CompletableFuture.uniWhenCompleteStage(CompletableFuture.java:887) 在 java.base/java.util.concurrent.CompletableFuture.whenComplete(CompletableFuture.java:2325) 在 org.apache.camel.processor.saga.MandatorySagaProcessor.process(MandatorySagaProcessor.java:39) 在 org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:824) 在 org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:732) 在 org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:196) 在 org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:164) 在 org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59) 在 org.apache.camel.processor.Pipeline.process(Pipeline.java:163) 在 org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:383) 在 org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:96) 在 org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:212) 在 org.apache.camel.impl.engine.SharedCamelInternalProcessor$1.process(SharedCamelInternalProcessor.java:109) 在 org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:81) 在 org.apache.camel.impl.engine.SharedCamelInternalProcessor.process(SharedCamelInternalProcessor.java:106) 在 org.apache.camel.support.cache.DefaultProducerCache.send(DefaultProducerCache.java:180) 在 org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:176) 在 org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:172) 在 org.apache.camel.impl.engine.DefaultProducerTemplate.send(DefaultProducerTemplate.java:153) 在org.apache.camel.impl.engine.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:187) ... 72 更多

My test case look like this:

@SpringBootTest
@MockEndpoints
@DirtiesContext
public class MemberCashCreateOrderSagaRouteTest {

    @EndpointInject("mock:generateOrderId")
    private MockEndpoint mockGenerateOrderIdEndpoint;

    @EndpointInject("mock:mockCompletion")
    private MockEndpoint mockCompletionEndpoint;

    @Produce(CamelConstants.MEMBER_CASH_ORDER_WORKFLOW)
    private ProducerTemplate producerTemplate;

    @Autowired
    CamelContext camelContext;

    @Test
    public void testMemberCashOrderWorkflow() throws Exception {
        AdviceWith.adviceWith(camelContext.getRoutes().get(12).getRouteId(), camelContext, new AdviceWithRouteBuilder() {

            @Override
            public void configure() throws Exception {
                replaceFromWith("direct:memberCashOnlyOrderMock");

                interceptSendToEndpoint(CamelConstants.COMPLETION_STEP)
                        .skipSendToOriginalEndpoint()
                        .to(mockCompletionEndpoint.getEndpointUri());

                interceptSendToEndpoint(CamelConstants.GENERATE_ORDER_ID_WF_STEP)
                        .skipSendToOriginalEndpoint()
                        .to(mockGenerateOrderIdEndpoint.getEndpointUri());
            }
        });
        producerTemplate.sendBody("direct:memberCashOnlyOrderMock", "order");

        mockCompletionEndpoint.expectedBodiesReceived("order");
        mockGenerateOrderIdEndpoint.expectedBodiesReceived("order");
        
        mockCompletionEndpoint.expectedMessageCount(1);
        mockGenerateOrderIdEndpoint.expectedMessageCount(1);
        
        mockCompletionEndpoint.assertIsSatisfied();
        mockGenerateOrderIdEndpoint.assertIsSatisfied();
        

    }

}

升级之前,它工作正常。有人可以帮助我理解我在这里做错了什么吗?

我浏览了 Spring Boot 3 迁移指南以及 Apache Camel 3 到 4 迁移指南,但我没有找到任何可能导致此错误的内容。`

apache-camel spring-boot-3
1个回答
0
投票

你明白了吗?我陷入了同样的错误

© www.soinside.com 2019 - 2024. All rights reserved.