Apache camel salesforce 组件 - 如何使用自己的连接参数启动多个路由?

问题描述 投票:0回答:2

我有多个 salesforce 实例,我想使用 apache camel SalesforceComponent 连接。连接参数(clientId、secret 等)仅在运行时可用,并且每个实例都不同。我如何在运行时设置它并创建并行运行的路由的多个实例?

我尝试创建组件的单独实例,但这似乎不起作用。它总是从 application.properties 中读取

SalesforceComponent salesforce = new SalesforceComponent(camelContext);
salesforce.setLoginUrl("https://login.salesforce.com");
salesforce.setClientId("XXXXXXX");
salesforce.setRefreshToken("XXXXXXXXXXXXXX");
salesforce.setClientSecret("CCCCCCCCCCCC");
salesforce.setAuthenticationType(AuthenticationType.REFRESH_TOKEN);

我正在使用 Spring Boot (2.7.2) 和 Camel (2.19.0)

(它类似于问题 - Camel Salesforce - 多组件配置

添加更多细节:

使用不同的名称设置新创建的异常(salesforcev2)

camelContext.addComponent("salesforcev2", component);
producerTemplate.requestBody("direct:my-route",
        "hello", String.class);

Caused by: org.apache.camel.FailedToCreateProducerException: Failed to create Producer for endpoint: salesforcev2://query?sObjectClass=com.salesforce.dto.QueryRecordsCase&sObjectQuery=SELECT+Id%2C+Subject+FROM+Case. Reason: java.lang.NullPointerException
    at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:579) ~[camel-core-2.19.0.jar:2.19.0]
....
Caused by: java.lang.NullPointerException: null
    at org.apache.camel.component.salesforce.internal.client.AbstractClientBase.start(AbstractClientBase.java:91) ~[camel-salesforce-2.19.0.jar:2.19.0]
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75) ~[camel-core-2.19.0.jar:2.19.0]

路线

       from("direct:my-route")
               .to("salesforcev2:query?sObjectQuery=SELECT Id, Subject FROM Case&sObjectClass=com.salesforce.dto.QueryRecordsCase")
            .streamCaching()
                    .to("log:my-log");
spring-boot apache-camel spring-camel
2个回答
1
投票

尝试以下操作:

SalesforceComponent salesforce2 = new SalesforceComponent();
// set component properties 
context.addComponent("salesforce2", salesforce2);
...
// in a RouteBuilder, etc.
from("salesforce2:query")

0
投票

Jeremy Ross 上面的回答是正确的。但是,请注意它只适用于更高版本的骆驼。我从我使用的 2.x 升级到版本 3.14.7。无法编辑以上内容以添加此内容。

    SalesforceComponent component = new SalesforceComponent();
    component.setClientId("xxxxxxxx");
    component.setClientSecret("xxxxxxxx");
    component.setRefreshToken("xxxxxxxx");
    component.setLoginUrl("https://login.salesforce.com");
    component.setAuthenticationType(AuthenticationType.REFRESH_TOKEN);
    component.setLazyLogin(false);

    // add it to context
    camelContext.addComponent("salesforcev2", component);
© www.soinside.com 2019 - 2024. All rights reserved.