使用弹簧集成的多个KafkaProducerMessageHandler时出现问题

时间:2018-02-20 06:55:14

标签: spring-integration kafka-producer-api spring-kafka mapr-streams

这是帖子MaprStream with spring integration Kafka Producer issue

的扩展名

在向maprstream发布消息时尝试实现同步属性时,我遇到多个KafkaProducerMessageHandler的问题

@Autowired
Qualifier("abcHandler.handler")
private KafkaProducerMessageHandler abcHandler;

@Autowired
Qualifier("xyzHandler.handler")
private KafkaProducerMessageHandler xyzHandler;

@PostConstruct
public void init() {
    this.abcHandler.setSync(true);
    this.xyzHandler.setSync(true);
}

Bean配置:

<int:chain input-channel="inputToKafka"> 
    <int-kafka:outbound-channel-adapter 
            id="abcHandler" 
            kafka-template="template" 
            topic="${maprstream.stream.topicname}" > 
    </int-kafka:outbound-channel-adapter> 
</int:chain>

<int:chain input-channel="inputToKafka1"> 
    <int-kafka:outbound-channel-adapter 
            id="xyzHandler" 
            kafka-template="template1" 
            topic="${maprstream.stream.topicname1}" > 
    </int-kafka:outbound-channel-adapter> 
</int:chain>

我在尝试加载bean时遇到以下异常。

  

在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:   创建名称为&#39; maprStreamProducerHandlerSync的bean时出错:通过字段表示不满意的依赖关系&#39; abcHandler&#39;   嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型的限定bean   &#39; org.springframework.integration.kafka.outbound.KafkaProducerMessageHandler&#39;可用:预计至少有1个豆有资格作为autowire候选者。   依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),   @ org.springframework.beans.factory.annotation.Qualifier(值= abcHandler.handler)}

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

为什么在<chain/> s内有这些单个组件?链通常用于分组多个元素。

the documentation about chains;向下滚动到&#39; id&#39; Attribute`

<int:chain id="chain1" input-channel="inputToKafka"> 
    <int-kafka:outbound-channel-adapter 
            id="abcHandler" 
            kafka-template="template" 
            topic="${maprstream.stream.topicname}" > 
    </int-kafka:outbound-channel-adapter> 
</int:chain>

链中的组件获取复合bean名称。在这种情况下,它将是chain1$child.abcHandler.handler。自动接线时,如果有多个适配器,则需要在@Qualifier中使用此值。