gpt4 book ai didi

java - Spring Integration 使用 randomUUID 丰富 Header

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:33 29 4
gpt4 key购买 nike

我是 Spring Integration 的新手,使用 Java 7,在转向 Spring 集成 DSL 之前我有这个 xml 配置,我的应用程序正在努力使用从随机 UUID 生成的监控 ​​ID 来丰富 header (这是为了关联请求和响应以便稍后在日志中搜索,也许这可以用不同的方式完成,不知道):

<int:chain input-channel="requestChannel" output-channel="responseChannel">     
<int:header-enricher>
<int:header name="translator-monitoringId" expression="T(java.util.UUID).randomUUID()"/>
</int:header-enricher>
<int:transformer ref="customHeaderTransformerBean" method="convertToJson"/>
<int-amqp:outbound-gateway
exchange-name="translatorExchange"
amqp-template="amqpTemplate"
routing-key-expression ="headers['translatorRoutingKey']"
mapped-request-headers="translator-*"
mapped-reply-headers="translator-*"/>
</int:chain>

所以,在迁移到 DSL 之后,我有这个:

return IntegrationFlows
.from("requestChannel")
.enrichHeaders(new Consumer<HeaderEnricherSpec>() {
@Override
public void accept(HeaderEnricherSpec t) {
t.header(Constants.MONITORING_ID, UUID.randomUUID());
}
})
.transform(customToJsonTransformer())
.handle(Amqp
.outboundGateway(rabbitTemplate())
.exchangeName(TRANSLATOR_EXCHANGE_NAME)
.routingKeyExpression(
"headers['" + Constants.TRANSLATOR_ROUTING_KEY + "']")
.mappedReplyHeaders(Constants.AMQP_CUSTOM_HEADER_FIELD_NAME_MATCH_PATTERN)
.mappedRequestHeaders(Constants.AMQP_CUSTOM_HEADER_FIELD_NAME_MATCH_PATTERN))
.route(new ResponseFromTranslatorRouterSI(jsonResponseMessageChannel(), exceptionResponseMessageChannel())).get();

嗯,问题是随机 UUID 作为 monitoringId 包含在 header 中,但在第一次执行后它保持不变,它不会像以前那样随着每个请求而改变。

你知道我是否遗漏了什么吗?

感谢您的帮助。

最佳答案

是的,没错。

让我们再看一遍您的代码:

public void accept(HeaderEnricherSpec t) {
t.header(Constants.MONITORING_ID, UUID.randomUUID());
}

那么,什么时候评估你的UUID.randomUUID()?对,就在 accept() 方法调用期间。因此只有一次。

使用您的 XML 变体,您处理 expression ,它真正评估每条消息。

要使其以 Java DSL 风格工作,您应该做类似的事情:

 t.headerExpression(Constants.MONITORING_ID, "T(java.util.UUID).randomUUID()");

或者更好的是:

t.headerFunction(Constants.MONITORING_ID, 
new Function<Message<Object>, Object>() {
Object apply(Message<Object> message) {
return UUID.randomUUID();
}
}
);

关于java - Spring Integration 使用 randomUUID 丰富 Header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292265/

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