Citrus 并行收发消息找不到回复通道
Citrus fails to find reply channel when receiving & sending messages in parallel
我正在使用 Citrus 框架来测试 Camel 路由。我正在向基于 Camel 的应用程序发送请求,该应用程序又将多个请求并行发送到 SOAP 服务器。
我正在尝试使用并行容器模拟带有 Citrus 的 SOAP 服务器。我使用选择器来触发正确的接收和发送动作,类似于下面的例子(实际代码有点复杂):
parallel().actions(
sequential().actions(
soap().server("soapService")
.receive()
.selector("xpath:local-name(/*)='exampleRequest1' AND xpath://ns1:id/text()='123'")
.payload(new ClassPathResource("data/123/exampleRequest1.xml")),
echo("Received exampleRequest1"),
soap().server("soapService")
.send()
.payload(new ClassPathResource("data/123/exampleResponse1.xml")),
echo("Sent exampleResponse1"),
),
sequential().actions(
soap().server("soapService")
.receive()
.selector("xpath:local-name(/*)='exampleRequest2' AND xpath://ns1:id/text()='456'")
.payload(new ClassPathResource("data/456/exampleRequest2.xml")),
echo("Received exampleRequest2"),
soap().server("soapService")
.send()
.payload(new ClassPathResource("data/456/exampleResponse2.xml")),
echo("Sent exampleResponse2"),
),
...
)
Citrus 确实收到了消息,但无法回复。每个并行线程的错误信息是:
13:35:36.121 [Thread-22] ERROR com.consol.citrus.container.Parallel - Parallel test action raised error
java.lang.IllegalArgumentException: Failed to find reply channel for message correlation key: citrus_message_id = 'c37eb703-4fb3-4c34-98f8-9cf8ee0414a1'
at org.springframework.util.Assert.notNull(Assert.java:198)
at com.consol.citrus.channel.ChannelSyncConsumer.send(ChannelSyncConsumer.java:73)
at com.consol.citrus.actions.SendMessageAction.doExecute(SendMessageAction.java:125)
…
重要提示:每个线程正在寻找的citrus_message_id始终相同但应该不同。因此,如果其中一个发送操作确实成功,则通常是使用错误的回复渠道发送。
这可能是什么问题?这是一个错误还是我遗漏了什么?
非常感谢!
并行容器导致这里出现问题。但是在接收操作中使用选择器时,您可以安全地删除并行容器。一旦你删除了平行线
,它应该可以正常工作
我正在使用 Citrus 框架来测试 Camel 路由。我正在向基于 Camel 的应用程序发送请求,该应用程序又将多个请求并行发送到 SOAP 服务器。 我正在尝试使用并行容器模拟带有 Citrus 的 SOAP 服务器。我使用选择器来触发正确的接收和发送动作,类似于下面的例子(实际代码有点复杂):
parallel().actions(
sequential().actions(
soap().server("soapService")
.receive()
.selector("xpath:local-name(/*)='exampleRequest1' AND xpath://ns1:id/text()='123'")
.payload(new ClassPathResource("data/123/exampleRequest1.xml")),
echo("Received exampleRequest1"),
soap().server("soapService")
.send()
.payload(new ClassPathResource("data/123/exampleResponse1.xml")),
echo("Sent exampleResponse1"),
),
sequential().actions(
soap().server("soapService")
.receive()
.selector("xpath:local-name(/*)='exampleRequest2' AND xpath://ns1:id/text()='456'")
.payload(new ClassPathResource("data/456/exampleRequest2.xml")),
echo("Received exampleRequest2"),
soap().server("soapService")
.send()
.payload(new ClassPathResource("data/456/exampleResponse2.xml")),
echo("Sent exampleResponse2"),
),
...
)
Citrus 确实收到了消息,但无法回复。每个并行线程的错误信息是:
13:35:36.121 [Thread-22] ERROR com.consol.citrus.container.Parallel - Parallel test action raised error
java.lang.IllegalArgumentException: Failed to find reply channel for message correlation key: citrus_message_id = 'c37eb703-4fb3-4c34-98f8-9cf8ee0414a1'
at org.springframework.util.Assert.notNull(Assert.java:198)
at com.consol.citrus.channel.ChannelSyncConsumer.send(ChannelSyncConsumer.java:73)
at com.consol.citrus.actions.SendMessageAction.doExecute(SendMessageAction.java:125)
…
重要提示:每个线程正在寻找的citrus_message_id始终相同但应该不同。因此,如果其中一个发送操作确实成功,则通常是使用错误的回复渠道发送。
这可能是什么问题?这是一个错误还是我遗漏了什么? 非常感谢!
并行容器导致这里出现问题。但是在接收操作中使用选择器时,您可以安全地删除并行容器。一旦你删除了平行线
,它应该可以正常工作