骆驼:根据消息的来源省略部分路线
Camel: Omitting parts of a route depending on where the message comes from
我有两条路线:
.from("A")
.to("C")
.to("B");
.from("C")
*some processing logic*
.to("D");
是否可以构建第二条路线:
- 当消息来自第一个路由时,部分或全部逻辑被省略;
- 当消息直接来到第二条路由时,使用逻辑?
您可以在路线上设置交换属性。然后您可以评估 filter 或 choice 中的值以分支或更改路由逻辑。我建议不要做任何比这更复杂的事情,以避免路由之间不必要的耦合。
示例:
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");
}
};
}
}
我有两条路线:
.from("A")
.to("C")
.to("B");
.from("C")
*some processing logic*
.to("D");
是否可以构建第二条路线:
- 当消息来自第一个路由时,部分或全部逻辑被省略;
- 当消息直接来到第二条路由时,使用逻辑?
您可以在路线上设置交换属性。然后您可以评估 filter 或 choice 中的值以分支或更改路由逻辑。我建议不要做任何比这更复杂的事情,以避免路由之间不必要的耦合。
示例:
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");
}
};
}
}