gpt4 book ai didi

spring-boot - Autowiring 的 FluentProducerTemplate 在同一服务中使用之前是否需要清除其 header 和正文?

转载 作者:行者123 更新时间:2023-12-02 03:09:37 32 4
gpt4 key购买 nike

服务 Bean 中的自动连线 FluentProducerTemplate 将间歇性地具有同一服务 Bean 中另一个方法中先前调用的 header 集。在本例中,我将 CamelOlingo4.keyPredicate 设置为 header 。

    FluentProducerTemplate producerTemplate;


UserAccount account = producerTemplate
.withHeader("CamelOlingo4.$select", "cva_useraccountid,statuscode,emailaddress,cva_firstname,cva_lastname,cva_password,cva_lastlogout,cva_lastlogin,cva_lastloginattempt,cva_lockeduntil,cva_loginattemptcount,_cva_contact_value")
.withHeader("email",username)
.withHeader("activeStatus",MSDynamicsAccountStatusCodes.ACTIVE.toString())
.withHeader("lockedStatus",MSDynamicsAccountStatusCodes.LOCKED.toString())
.to("direct:login")
.request(UserAccount.class);

以及我的路线定义:

from("direct:login")
.id("routes.id.login")
.toD("olingo4://read/{{route.login}}?$filter=emailaddress eq '${header.email}' and (statuscode eq ${header.activeStatus} or statuscode eq ${header.lockedStatus})").log("Response from Olingo: ${body}")
.process(new OlingoProcessor());

成功登录后,我确实使用 keyPredicate 触发异步请求路由...

producerTemplate
.withHeader("CamelOlingo4.keyPredicate", userId)
.withHeader("Content-Type", "application/json")
.withBody(user)
.to("direct:tracklogin")
.asyncSend();

并为 track:login 定义路由:

from("direct:tracklogin")
.id("routes.id.track.login")
.marshal()
.json(JsonLibrary.Jackson)
.convertBodyTo(String.class)
.log("JSON Body: ${id} ${body}")
.to("olingo4://patch/{{route.patch.track-login}}");

随机地,“direct:login”路由将在 header 中设置 keyPredicate,从而导致我的 OlingoProcessor 中出现错误,因为我无法从交换主体中获取预期的对象。 (使用 keyPredicate 查询时 Olingo 对象有所不同)

不确定问题是否在于我的实现、camel-olingo4 comp 还是 FluentProducerTemplate 本身......但我确实看到 FluentProducerTemplate 上有一个clearAll() 方法。我怀疑每当我在同一服务 bean 中使用 Autowiring 的生产者模板时都需要调用它。只需要一些确认...

最佳答案

由于 Spring 默认范围是 singleton,因此注入(inject)的生产者模板 bean 实例确实会被重用,并且应该在设置 headers、body 等之前调用clearAll()...

当然,另一种可能的解决方案是每次创建一个全新的生产者模板实例:

FluentProducerTemplate producerTemplate = context.createFluentProducerTemplate();
UserAccount account = producerTemplate.withHeader(...)

关于spring-boot - Autowiring 的 FluentProducerTemplate 在同一服务中使用之前是否需要清除其 header 和正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57995703/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com