是否可以在Spring集成TCP中使用自定义标头?

是否可以在Spring集成TCP中使用自定义标头?,tcp,spring-integration,spring-integration-ip,Tcp,Spring Integration,Spring Integration Ip,我一直在尝试创建一个简单的SpringIntegrationTCP示例,它在消息中使用一个自定义UUID头,并通过TCP通道发送此消息。之后,我在其他服务中恢复了相同的消息,但消息头不会发送到服务器 我是这样创建消息的: Message<byte[]> message1 = MessageBuilder .withPayload(payload) .setHeader("traceId", traceI

我一直在尝试创建一个简单的SpringIntegrationTCP示例,它在消息中使用一个自定义UUID头,并通过TCP通道发送此消息。之后,我在其他服务中恢复了相同的消息,但消息头不会发送到服务器

我是这样创建消息的:

           Message<byte[]> message1 = MessageBuilder
          .withPayload(payload)
          .setHeader("traceId", traceId)
          .build();
messagemessage1=MessageBuilder
.有效载荷(有效载荷)
.setHeader(“traceId”,traceId)
.build();
这是我的网关类:

@MessagingGateway
public interface IntegrationGateway {


  @Gateway(requestChannel = "toTcp")
  String toOut(Message<byte[]> message);
}
@MessagingGateway
公共接口集成网关{
@网关(requestChannel=“toTcp”)
字符串输出(消息);
}
这是我在其他服务中的“侦听器”:

  @ServiceActivator(inputChannel = "fromTcp")
  public void convert(Message<byte[]> message) {

    byte[] payload = message.getPayload();

    UUID traceId = message.getHeaders().get("traceId", UUID.class);

}
@ServiceActivator(inputChannel=“fromTcp”)
公共无效转换(消息){
字节[]有效载荷=message.getPayload();
UUID traceId=message.getHeaders().get(“traceId”,UUID.class);
}
但是当我在另一个服务中恢复消息时,这个头是空的


是否可以在服务器中恢复我的自定义头?

TCP是流媒体协议;它没有头和有效负载的概念

该框架确实提供了一种机制来将头映射到流中,例如使用JSON

TCP是一种流协议。序列化器和反序列化器在流中划分消息。在3.0之前,只有消息有效负载(字符串或字节[])可以通过TCP传输。从3.0开始,您可以传输选定的标头以及有效负载。但是,“活动”对象(如replyChannel标头)无法序列化

通过TCP发送头信息需要一些额外的配置

第一步是为ConnectionFactory提供使用mapper属性的MessageConvertingCmpessageMapper。此映射器委托给任何MessageConverter实现,以将消息转换为可由配置的序列化程序和反序列化程序序列化和反序列化的对象,或从中转换消息

Spring集成提供了一个MapMessageConverter,它允许指定添加到Map对象的头列表以及负载。生成的映射有两个条目:payload和headers。headers条目本身就是一个映射,包含选定的标题