Size: a a a

2020 March 07

IK

Igor Komarov in pro.jvm
Ed
https://jaxenter.com/introducing-new-jvm-lanaguage-concurnas-167915.html
Новый урожай языков под JVM? Из примечательного - работа с офхипом и векторизация
Выглядит интересно. А на какой стадии разработка языка, где-то используется активно? Да и в целом тыркал кто-то?
источник

S🕶

Sander 🕶 in pro.jvm
Всем привет,
наверное дней 3 работаю с кафа, сейчас надо сделать command handler,
я отправляю message, но падает с ошибкой:
@KafkaHandler
private void createTicket(CreateTicketCommand command) {


если добавить handler с типом String, то я получу отправленный результат:
источник

S🕶

Sander 🕶 in pro.jvm
@KafkaHandler
private void createTicket(String test) {

---
Я настраивал конфиги чтоб работало с разными типами, но не работает,
может я что-то еще упустил, чего я не знаю? Если надо могу конфиги показать.
источник

S🕶

Sander 🕶 in pro.jvm
org.springframework.kafka.KafkaException: No method found for class java.lang.String - всегда вот такая ошибка,
чего ему нехвтает? мне казалось я настроил kafka, чтоб работал с разными типами.
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶 in pro.jvm
Sander 🕶
org.springframework.kafka.KafkaException: No method found for class java.lang.String - всегда вот такая ошибка,
чего ему нехвтает? мне казалось я настроил kafka, чтоб работал с разными типами.
Какой deserializer прописан в конфиге?
источник

S🕶

Sander 🕶 in pro.jvm
я сейчас про это читаю как раз токи, но не ужели еще для этого надо добавлять deserializer? очень много кода получается.

@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}

@Bean
public <T> ProducerFactory<String, T> genericProducerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶 in pro.jvm
Ну вот примерно то же самое нужно для консьюмера
источник

S🕶

Sander 🕶 in pro.jvm
не с consumer-ом у меня все окай, под него у меня есть deserializer,
источник

S🕶

Sander 🕶 in pro.jvm
а вот для producer-a, что тоже надо o_O
источник

S🕶

Sander 🕶 in pro.jvm
я ведь уже отправляю ему нормальный объект
источник

S🕶

Sander 🕶 in pro.jvm
я уже получил dto-шку и смапил json -> object и отправляю уже объект нормальный в producer
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶 in pro.jvm
Sander 🕶
я уже получил dto-шку и смапил json -> object и отправляю уже объект нормальный в producer
Ну так ошибка не на отправке, а на получении
источник

S🕶

Sander 🕶 in pro.jvm
his.template.send(
 new GenericMessage<>(
   new CreateTicketCommand(
     accountId,
     ticketDto.getAmount()
   ),
   Collections.singletonMap(KafkaHeaders.TOPIC, createTicket)
 )
);
источник

S🕶

Sander 🕶 in pro.jvm
Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶
Ну так ошибка не на отправке, а на получении
да ошибка на получении, чего нехватает ему? `CommandHandler`-у, для него тоже нужен какой-то deserializer?
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶 in pro.jvm
Sander 🕶
да ошибка на получении, чего нехватает ему? `CommandHandler`-у, для него тоже нужен какой-то deserializer?
В вашем случае нужен JsonDeserializer, т.к. при отправке используется JsonSerializer
источник

S🕶

Sander 🕶 in pro.jvm
Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶
В вашем случае нужен JsonDeserializer, т.к. при отправке используется JsonSerializer
я получаю из web слоя json -> маплю в dto -> отправляю в commandHandler -> он сам делает "Json Serialize",
поэтому надо еще раз написать Json Deserialize ...?

Просто не понимаю, а он может как-то сам сделать Json Deserialize? ибо структура/название филдов у json, такая же как и у class-a.
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶 in pro.jvm
Sander 🕶
я получаю из web слоя json -> маплю в dto -> отправляю в commandHandler -> он сам делает "Json Serialize",
поэтому надо еще раз написать Json Deserialize ...?

Просто не понимаю, а он может как-то сам сделать Json Deserialize? ибо структура/название филдов у json, такая же как и у class-a.
хм) ну вообще можно было бы не мапить в дто, а использовать StringSerializer и кидать в кафку json.
А мапить уже при получении
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶 in pro.jvm
Но в общем идея такая - какой serializer в продюсере, такой deserializer в консьюмере
источник

S🕶

Sander 🕶 in pro.jvm
пусть будет dto-шка все ок
источник

D𝔇

Dmitry 𝔇𝔪𝔦𝔱𝔯𝔶 in pro.jvm
Тогда для консьюмера JsonDeserializer
источник