同时发送和接收
Simultanous sending and receiving
我正在尝试与 JMS 主题收发消息。
<testcase name="DeliveryToPT3PLIT">
...
<actions>
...
<send endpoint="fromEndpoint">
<message>
<resource file="com/roche/icc/citrus/messages/input/PT-3PLWoBatchSplit.xml"/>
</message>
<header>
...
</header>
</send>
<receive endpoint="toEndpoint">
<description>Receive asynchronous message from topic</description>
<message>
<resource file="com/roche/icc/citrus/messages/output/PT-3PLWoBatchSplit.xml"/>
</message>
<header>
...
</header>
</receive>
</actions>
</testcase>
看来这些操作是一个接着一个。问题是我的应用程序运行得非常快,当我向第一个主题发送消息时,它几乎立即出现在 "toEndpoint" 上。因此接收操作无法捕获适当的消息,因为它已经被处理过。
有什么办法可以同时进行这些操作吗?
此致
使用 JMS 主题需要注意一件事,因为它们以 publish/subscribe 方式工作,您必须先订阅才能接收消息。
这意味着您需要先订阅主题,然后才能发布消息。另外,如果你说你的应用程序很快,你可能需要等待几毫秒才能发送消息。这是我认为可能对您有用的 Java DSL 示例。 (注意:我已经用 JMS 主题测试了这个例子)
parallel().actions(
sequential().actions( // Thread #1
...
receive(action -> action.endpoint(toEndpoint).payload("message to be received"))),
sequential().actions( // Thread #2
sleep(500),
send(action -> action.endpoint(fromEndpoint).payload("message to be sent"))));
注意 parallel()
操作容器。它将在单独的线程中执行其中的每个操作。每个 sequential()
代表一系列操作,您可以将它们组合在一起。因为两个 sequential()
容器都在 parallel()
中,所以每个容器中的操作将在不同的线程上执行。
那么这里发生了什么:您将您的操作拆分到两个线程上。在第一个线程上,您等待一条消息。在第二个线程上,首先让它休眠 500 毫秒,然后发送消息。
很抱歉我没有 XML 示例,但无论如何我希望这对您有所帮助。
另外不要忘记在您的端点上将 pub-sub-domain
属性 设置为 true
。请参阅有关 JMS 主题的 Citrus 文档:here.
我正在尝试与 JMS 主题收发消息。
<testcase name="DeliveryToPT3PLIT">
...
<actions>
...
<send endpoint="fromEndpoint">
<message>
<resource file="com/roche/icc/citrus/messages/input/PT-3PLWoBatchSplit.xml"/>
</message>
<header>
...
</header>
</send>
<receive endpoint="toEndpoint">
<description>Receive asynchronous message from topic</description>
<message>
<resource file="com/roche/icc/citrus/messages/output/PT-3PLWoBatchSplit.xml"/>
</message>
<header>
...
</header>
</receive>
</actions>
</testcase>
看来这些操作是一个接着一个。问题是我的应用程序运行得非常快,当我向第一个主题发送消息时,它几乎立即出现在 "toEndpoint" 上。因此接收操作无法捕获适当的消息,因为它已经被处理过。
有什么办法可以同时进行这些操作吗?
此致
使用 JMS 主题需要注意一件事,因为它们以 publish/subscribe 方式工作,您必须先订阅才能接收消息。
这意味着您需要先订阅主题,然后才能发布消息。另外,如果你说你的应用程序很快,你可能需要等待几毫秒才能发送消息。这是我认为可能对您有用的 Java DSL 示例。 (注意:我已经用 JMS 主题测试了这个例子)
parallel().actions(
sequential().actions( // Thread #1
...
receive(action -> action.endpoint(toEndpoint).payload("message to be received"))),
sequential().actions( // Thread #2
sleep(500),
send(action -> action.endpoint(fromEndpoint).payload("message to be sent"))));
注意 parallel()
操作容器。它将在单独的线程中执行其中的每个操作。每个 sequential()
代表一系列操作,您可以将它们组合在一起。因为两个 sequential()
容器都在 parallel()
中,所以每个容器中的操作将在不同的线程上执行。
那么这里发生了什么:您将您的操作拆分到两个线程上。在第一个线程上,您等待一条消息。在第二个线程上,首先让它休眠 500 毫秒,然后发送消息。
很抱歉我没有 XML 示例,但无论如何我希望这对您有所帮助。
另外不要忘记在您的端点上将 pub-sub-domain
属性 设置为 true
。请参阅有关 JMS 主题的 Citrus 文档:here.