我有兩條路線:
.from("A")
.to("C")
.to("B");
.from("C")
*some processing logic*
.to("D");
是否可以構建第二條路線,以便:
- 當訊息來自第一條路由時,省略部分或全部邏輯;
- 當訊息直接到達第二條路由時,使用邏輯?
uj5u.com熱心網友回復:
您可以在路由上設定交換屬性。然后您可以評估過濾器或選擇中的值以分支或更改路由邏輯。我建議不要做任何比這更復雜的事情,以避免路線之間不必要的耦合。
例子:
package org.example;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
public class ExampleRouteTests extends CamelTestSupport {
@Test
public void shouldReturnSentBody() throws Exception {
final String testMessage = "AAAA";
MockEndpoint resultMockEndpoint = getMockEndpoint("mock:result");
resultMockEndpoint.expectedMessageCount(1);
resultMockEndpoint.message(0).body().isEqualTo(testMessage);
template.sendBody("direct:a", testMessage);
resultMockEndpoint.assertIsSatisfied();
}
@Test
public void shouldReturnBBBB() throws Exception {
MockEndpoint resultMockEndpoint = getMockEndpoint("mock:result");
resultMockEndpoint.expectedMessageCount(1);
resultMockEndpoint.message(0).body().isEqualTo("BBBB");
template.sendBody("direct:b", null);
resultMockEndpoint.assertIsSatisfied();
}
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:a")
.setProperty("From", constant("A"))
.to("direct:c");
from("direct:b")
.setProperty("From", constant("B"))
.to("direct:c");
from("direct:c")
.filter(exchangeProperty("From").isNotEqualTo("A"))
.log("Processing message")
.setBody(constant("BBBB"))
.end()
.log("body: ${body}")
.to("mock:result");
}
};
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485078.html
上一篇:如何創建正則運算式來驗證數字是否相同,即使用連字符(-)或字母數字分隔
下一篇:在陣列中查找max和min的索引
