Spring集成。能够自定义PublisherMetadataSource的实现

时间:2018-03-14 15:51:53

标签: spring spring-integration spring-cloud-stream

我正在尝试使用@Publisher注释来配置集成 将方法的结果发送到我的消息系统。

另外,我需要发送有关操作类型的信息,在标题中发生( CREATED / UPDATED / DELETED ),我发现,可以使用org.springframework.integration.aop.PublisherMetadataSource添加此逻辑,在构建消息时使用的。

我在考虑使用命名约定,例如,如果方法,来自 返回的有效负载为created,而不是添加标题已创建等。

但是当我查看Aop代理(org.springframework.integration.aop.PublisherAnnotationAdvisor)的构建来源时,我明白,我无法更改PublisherMetadataSource的实现。

public PublisherAnnotationAdvisor(Class<? extends Annotation> ... publisherAnnotationTypes) {
    this.publisherAnnotationTypes = new HashSet<Class<? extends Annotation>>(Arrays.asList(publisherAnnotationTypes));
    PublisherMetadataSource metadataSource = new MethodAnnotationPublisherMetadataSource(this.publisherAnnotationTypes);
    this.interceptor = new MessagePublishingInterceptor(metadataSource);
}

也许有人可以帮助我,我可以如何自定义它,或者添加这样的行为 到我的处理管道。

1 个答案:

答案 0 :(得分:1)

我认为您的意思是@Publisher而不是@Processor

我们应该考虑向headers添加@Publisher属性,以允许在已发布的消息中添加任意标头。我打开了INT-4431

现在,您必须覆盖默认的PublisherAnnotationBeanPostProcessor(在bean名称.internalPublisherAnnotationBeanPostProcessor下)并使用自定义顾问程序。