【问题标题】:Apache Camel routing with recipientList带有收件人列表的 Apache Camel 路由
【发布时间】:2018-03-27 07:14:33
【问题描述】:

我正在尝试使用 org.apache.camel 动态路由消息。

这是我的代码:

from("direct:messenger")
            .routeId("messenger-provider")
            .bean(messengerService, "process")
            .marshal().json(JsonLibrary.Jackson)
            .setHeader(Exchange.HTTP_METHOD, constant("POST"))
            .recipientList(header("access_token")).ignoreInvalidEndpoints()

这是我的服务类的相关部分:

    exchange.getIn().setHeader("access_token", messengerServiceEndpoint.getEndpointUri()+"?access_token="+accessToken);

实际上我想将 access_token 动态添加到端点 URI。但我只能从服务类中获取令牌。

如果有人有一些很棒的见解,谢谢

【问题讨论】:

    标签: java routing apache-camel messenger


    【解决方案1】:

    我认为您正在寻找的是 org.apache.camel.impl.JndiRegistryorg.apache.camel.impl.SimpleRegistry

    您可以将您的对象绑定到注册表并检索您需要的位置。

    http://camel.apache.org/registry.html

    查看此链接以创建 SimpleRegistry 并在 Java DSL 中使用:

    http://preparationforinterview.com/preparationforinterview/camel-spring-bean-javadsl

    下面是关于创建 JNDIRegistry 的 stackoverflow 问题:

    camel - get jndi registry

    如果你使用的是 Spring,那么你可以使用 ApplicationContextRegistry:

    ApplicationContextRegistry registry = exchange.getContext().getRegistry(ApplicationContextRegistry.class);
    Map<String,Object>map = (Map<String,Object>)registry.lookup("map");
    map.put("objectVar", objectVar);
    

    在你的 Spring 配置中有一个地图来加载对象:

    <bean id="map" class="java.util.HashMap"></bean>
    

    检索对象:

    Map<String,Object> map = (Map<String,Object>)registry.lookup("map");
        Object1 o = (Object1) map.get("objectVar");
    

    【讨论】:

    • 谢谢!实际上我刚刚使用 exchange.getOut().setHeader(Exchange.HTTP_QUERY, params); 解决了我的问题。但如果它允许更多抽象,我会研究它
    • 我认为 Exchange.HTTP_QUERY 适合您的情况,因为您只想设置查询参数..:)
    猜你喜欢
    • 2016-09-29
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多