Spring集成消息历史记录

时间:2018-12-17 15:53:07

标签: java spring-integration spring-integration-dsl

我已设置@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;

    }

}

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

enter image description here

如上所述,如何将“ name”属性更改为自己的转换器,将使打印变得毫无意义。

1 个答案:

答案 0 :(得分:2)

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;
}

由于没有为使用id的端点提供显式的FileMoveTransformer,因此您将基于端点ConsumerEndpointFactoryBean类获得该生成的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,并使您的消息历史记录更具可读性。