java - Camel : how can i send to an endpoint asynchronously

标签 java apache-camel

如何在不等待端点路由被处理的情况下向端点发送消息(也就是说,我的路由应该只发送消息并完成)?

最佳答案

使用 wireTap 或多播是您所追求的。无论指定什么 ExchangePattern,direct: 端点都会为下一步修改 Exchange。您可以通过使用这个失败的测试来查看:

public class StackOverflowTest extends CamelTestSupport {
    private static final String DIRECT_INPUT = "direct:input";
    private static final String DIRECT_NO_RETURN = "direct:no.return";
    private static final String MOCK_OUTPUT = "mock:output";
    private static final String FIRST_STRING = "FIRST";
    private static final String SECOND_STRING = "SECOND";

    @NotNull
    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from(DIRECT_INPUT)
                        .to(ExchangePattern.InOnly, DIRECT_NO_RETURN)
                        .to(MOCK_OUTPUT)
                        .end();

                from(DIRECT_NO_RETURN)
                        .bean(new CreateNewString())
                        .end();
            }
        };
    }

    @Test
    public void testShouldNotModifyMessage() throws JsonProcessingException, InterruptedException {
        final MockEndpoint myMockEndpoint = getMockEndpoint(MOCK_OUTPUT);
        myMockEndpoint.expectedBodiesReceived(FIRST_STRING);
        template.sendBody(DIRECT_INPUT, FIRST_STRING);
        assertMockEndpointsSatisfied();
    }

    public static class CreateNewString {
        @NotNull
        public String handle(@NotNull Object anObject) {
            return SECOND_STRING;
        }
    }
}

现在,如果您将上面的内容更改为 wireTap:

                from(DIRECT_INPUT)
                    .wireTap(DIRECT_NO_RETURN)
                    .to(MOCK_OUTPUT)
                    .end();

您会看到它按预期工作。您还可以使用多播:

                from(DIRECT_INPUT)
                    .multicast()
                    .to(DIRECT_NO_RETURN)
                    .to(MOCK_OUTPUT)
                    .end();

关于java - Camel : how can i send to an endpoint asynchronously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11981900/

相关文章:

java - Spring Boot-Camel-Maven : How to add my own parent Dependency along with Spring Boot Dependency?

java - Micronaut Controller 如何确定其基本 URL

java - jetty 服务器 Web 应用程序和 lib 文件的自动更新程序

java - 双重检查锁定从 checkstyle 中消失了——为什么?

java - 如何使用 apache Camel Bindy 将两个 xml 标签合并为一个 xml

java - Camel 卡夫卡 : Unable to read messages from Kafka topic

Java数表奇怪的错误

java - 计算链表交集的空间复杂度是多少

apache-camel - 如何在 Apache Camel 中设置一组流式 SQL 插入

java - Apache Camel 在路由期间返回多个异常