gpt4 book ai didi

java - MessageHeaders 在 HttpOutboundGateway 中丢失

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:18 24 4
gpt4 key购买 nike

我实现了 Message 接口(interface),以包含一些与服务器端 HeaderValueRouter 一起使用的 header 。

在一个虚拟机内,这是可行的(使用两个端点之间的过滤器进行测试)。

但是,如果我通过 HttpOutboundGatway 发送消息,我的字段将被删除(不包含在 HttpRequest 中)。因此路由信息在服务器端丢失。

我不应该操纵标题吗?

public class TaskMessage implements Message<String> {

private MessageHeaders headers;
private String payload;

public TaskMessage(String taskId, String boxId, String payload) {
super();
this.taskId = taskId;
this.boxId = boxId;
this.payload = payload;
StringMessage sm = new StringMessage(payload);
Set<String> keySet = sm.getHeaders().keySet();

HashMap<String, Object> map = new HashMap<String, Object>();
for (String key : keySet) {
map.put(key, sm.getHeaders().get(key));
}
map.put("taskId", taskId);
map.put("boxId", boxId);
headers = new MessageHeaders(map);
}
@Override
public MessageHeaders getHeaders() {
return headers;
}

@Override
public String getPayload() {
return payload;
}
}

编辑:

版本为1.0.3

我的配置部分是:

<si:inbound-channel-adapter ref="jdbcInputAdapter" method="fetchData" channel="msgChannel">
<si:poller max-messages-per-poll="1">
<si:interval-trigger interval="5000" />
</si:poller>
</si:inbound-channel-adapter>

<http:outbound-gateway id="httpChannelAdapter" auto-startup="true" request-timeout="1000" request-channel="msgChannel" reply-channel="replyChannel" default-url="http://localhost:8080/taskserver/gateway"/>

最佳答案

您使用的版本不支持(自定义) header 序列化。解决方案是制作一个包含所有所需信息的请求并将其作为有效负载传递。 2.0.x 版本中新的基于 REST 的 http 支持确实支持 header 映射,并且还公开了用于转换消息(包括 header )的扩展点。

顺便说一句,必须实现自定义消息的情况并不常见,因此我不会这样做,而是使用 MessageBuilder 创建消息

MessageBuilder.withPayload("foo").setHeader("taskId", "someTaskId").build();

一般来说,并非所有 header 都可以通过所有协议(protocol)进行传输,因此如果您想使用分布式系统,将需要发送的所有信息打包到有效负载中通常会更灵活。

关于java - MessageHeaders 在 HttpOutboundGateway 中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3262981/

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