Spring 集成消息历史记录

Spring Integration Message History

我已经设置好@EnableMessageHistory

我创建了这样的自定义转换器

public class FileMoveTransformer implements GenericTransformer<CustomerPojo, CustomerPojo> {
    private boolean renameFile;
    private String toLocation;
    private static final Logger LOGGER = LoggerFactory.getLogger(FileMoveTransformer.class);


    public FileMoveTransformer(String toLocation, final boolean renameFile) {
        this.toLocation = toLocation;
        this.renameFile = renameFile;
    }


    @Override
    public CustomerPojo transform(CustomerPojo input) {

    return input;

    }

}

当我查看消息历史记录时,它显示如下

如何将 "name" 属性更改为我自己的转换器,因为上面的打印没有意义。

MessageHistory 使它基于 bean 名称:

private static Properties extractMetadata(NamedComponent component) {
    Entry entry = new Entry();
    String name = component.getComponentName();
    String type = component.getComponentType();
    if (name != null && !name.startsWith("org.springframework.integration")) {
        entry.setName(name);
        if (type != null) {
            entry.setType(type);
        }
    }
    if (!entry.isEmpty()) {
        entry.setTimestamp(Long.toString(System.currentTimeMillis()));
    }
    return entry;
}

由于您没有为使用您的 FileMoveTransformer 的端点提供明确的 id,您将根据端点 ConsumerEndpointFactoryBean class 获得生成的 bean 名称.

因为你没有展示你如何使用这个 FileMoveTransformer,我只能滥用猜测它是关于 IntegrationFlow 而你有这样的东西:

.transform(new FileMoveTransformer())

所以,考虑在其中添加一个 id,例如:

.transform(new FileMoveTransformer(), e -> e.id("fileMoveTransformer"))

https://docs.spring.io/spring-integration/reference/html/java-dsl.html#java-dsl-endpoints

否则,请分享您的使用方式,我们会让您知道需要更改哪些内容,以便为组件带来您自己的自定义 ID,并使您的消息历史记录更具可读性。