无法在春季云流中使用Custome序列化器

时间:2020-11-01 10:46:28

标签: java spring-boot

我正在尝试在kafka的经纪人中发送序列化的对象

public void sendRsvpMessage(WebSocketMessage<?> message) {
        
        RSVP rsvpMsg = gson.fromJson(message.getPayload().toString(), RSVP.class);
        System.out.println("rsvpMsg Object: "+rsvpMsg);
        
        if (rsvpMsg.response.equals("yes")) {
            producer.anOutputYes().send(MessageBuilder.withPayload(rsvpMsg).build());
        }
        else {
            producer.anOutputNo().send(MessageBuilder.withPayload(rsvpMsg).build());
        }

    }

RsvpSerializer.class

public class RsvpSerializer implements Serializer<Object> {


    @Override
    public void configure(Map var1, boolean var2) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public byte[] serialize(String s, Object o) {
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(baos);
            oos.writeObject(o);
            oos.close();
            byte[] b = baos.toByteArray();
            return b;
        } catch (IOException e) {
            return new byte[0];
        }
    }

    @Override
    public void close() throws IOException {
        // TODO Auto-generated method stub
        
    }
}

应用.properties

spring.cloud.stream.kafka.binder.zkNodes=localhost:2181
spring.cloud.stream.kafka.binder.brokers=localhost:9093
spring.cloud.stream.bindings.output.content-type=text/plain
spring.cloud.stream.bindings.output.producer.headerMode=raw
spring.kafka.producer.value-serializer: com.rsvps.serializer.RsvpSerializer
server.port=8081

出现以下错误:

2020-11-01 14:59:07.583  INFO 11179 --- [ask-scheduler-1] o.a.k.clients.producer.KafkaProducer     : [Producer clientId=producer-50] Closing the Kafka producer with timeoutMillis = 0 ms.
2020-11-01 14:59:07.584 ERROR 11179 --- [ask-scheduler-1] o.s.c.s.b.k.p.KafkaTopicProvisioner      : Cannot initialize Binder

org.apache.kafka.common.KafkaException: Failed to construct kafka producer
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:441) ~[kafka-clients-1.0.1.jar:na]
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:285) ~[kafka-clients-1.0.1.jar:na]
    at org.springframework.kafka.core.DefaultKafkaProducerFactory.createKafkaProducer(DefaultKafkaProducerFactory.java:225) ~[spring-kafka-2.1.6.RELEASE.jar:2.1.6.RELEASE]

请问,为什么会出现此错误?序列化对象时发生什么错误了?

但是,如果我从application.properties文件中删除我的序列化程序属性,它可以正常运行,并在控制台中使用以下属性显示它。

value.serializer = class org.apache.kafka.common.serialization.ByteArraySerializer

请提出建议,我该如何使用自己的序列化程序?

0 个答案:

没有答案