class is not in the trusted packages 에러는 아마 intellij에서 producer랑 consumer를 모듈로 각각분리해서
entity도 개별적으로 존재? 하는 상황일 것이다 (consumer와 producer의 entity의 package fullname이 다를경우)
예를들어 producer쪽 entity의 package를 포함한 fullname이 zzz.xxx.producer.MyEntity 이고
consumer쪽 entity의 package를 포함한 fullname이 zzz.xxx.consumer.MyEntity 라면
consumer쪽의 JsonDeserializer에서 class is not in the trusted packages 에러를 뿜뿜할 것이다.
왜냐면 직렬화, 역직렬화에서는 package 이름까지 포함하기때문이다 ...
해결은 JsonDeserializer에 addTrustedPackages() 메서드를 수정하면 된다.
>> Code
@Bean
public ConsumerFactory<String, Object> getConsumerProps() {
JsonDeserializer<Object> deserializer = new JsonDeserializer<>(Object.class);
deserializer.setRemoveTypeHeaders(false);
deserializer.addTrustedPackages("*");
deserializer.setUseTypeMapperForKey(true);
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVER);
props.put(ConsumerConfig.GROUP_ID_CONFIG, KAFKA_GROUPID);
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, deserializer);
return new DefaultKafkaConsumerFactory<>(
props,
new StringDeserializer(),
deserializer);
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, Object> consumerListener() {
ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(getConsumerProps());
return factory;
}
반응형
'클라우드 및 인프라 > Kubernetes' 카테고리의 다른 글
Mac OS brew uninstall 오류/ Mac OS 패키지 삭제 - Error: No such keg: /opt/homebrew/Cellar/redis (0) | 2023.05.02 |
---|---|
[Helm] helm 으로 Grafana, Redis 설치하고 Grafana에 Redis 연결하기 (0) | 2023.04.28 |
[Helm] Mac에 Helm 설치하기 (0) | 2023.04.21 |
[k8s] 쿠버네티스 Job, CronJob (0) | 2023.03.29 |
[k8s] node-shell (Github Plugins) (0) | 2023.03.28 |