Java Spring云流向Kafka主题发送数据失败
我有一个SCS水槽应用程序。我正在尝试使用SpringKafka向kafka主题发送MessageBuilder消息 而且 我试图在这里有条件地使用弹簧卡夫卡。根据下面的代码,是否有一种方法可以使用SCS(即@SendTo等)实现这一点?理想情况下,我希望使用处理器,而不是接收器。只是不清楚条件转发 谢谢你抽出时间 demoSink:Java Spring云流向Kafka主题发送数据失败,java,spring,apache-kafka,spring-cloud-stream,Java,Spring,Apache Kafka,Spring Cloud Stream,我有一个SCS水槽应用程序。我正在尝试使用SpringKafka向kafka主题发送MessageBuilder消息 而且 我试图在这里有条件地使用弹簧卡夫卡。根据下面的代码,是否有一种方法可以使用SCS(即@SendTo等)实现这一点?理想情况下,我希望使用处理器,而不是接收器。只是不清楚条件转发 谢谢你抽出时间 demoSink: @EnableBinding(Sink.class) public class SampleSink { @Servic
@EnableBinding(Sink.class)
public class SampleSink {
@ServiceActivator(inputChannel = Sink.INPUT)
public void processor(Message<?> message) {
@Autowired
private Sender sender;
Message<String> message1 = (Message<String>) MessageBuilder.fromMessage(message)
.setHeader("header1", "header1")
.copyHeadersIfAbsent(message.getHeaders())
.build();
if(someObj.getSomething()==something){
sender.sendt1(message1);
}
else{
sender.sendt2(message)
}
}
spring正在尝试将ByteArray强制转换为String对象,如果您只尝试转发消息,可以这样做: 改为:
Message<?> message1 = MessageBuilder.fromMessage(message)
.setHeader("header1", "header1")
.copyHeadersIfAbsent(message.getHeaders())
.build();
message1=MessageBuilder.fromMessage(Message)
.setHeader(“header1”、“header1”)
.CopyHeadersFabSent(message.getHeaders())
.build();
在SenderConfig中,使用ByteArraySerializer.class代替键和值
@Configuration
public class SenderConfig {
@Value("${spring.cloud.stream.kafka.binder.brokers}")
private String bootstrapServers;
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return props;
}
@Bean
public ProducerFactory<String, String> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}
Caused by:
org.apache.kafka.common.errors.SerializationException: Can't convert value of class [B to class org.apache.kafka.common.serialization.StringSerializer
specified in value.serializer
Caused by: java.lang.ClassCastException:
[B cannot be cast to java.lang.String
Message<?> message1 = MessageBuilder.fromMessage(message)
.setHeader("header1", "header1")
.copyHeadersIfAbsent(message.getHeaders())
.build();