修改:接收消息 String类型 反序列化失败

This commit is contained in:
lxy
2020-08-22 09:23:46 +08:00
parent c8746b712e
commit 17b28a9124
5 changed files with 28 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
package com.zdemo;
import org.redkale.convert.json.JsonConvert;
import org.redkale.util.TypeToken;
import java.util.Collection;
@@ -13,4 +14,18 @@ public interface IConsumer<T extends Event> {
TypeToken<T> getTypeToken();
void accept(T t);
default void accept(String value) {
System.out.println(value);
if ("com.zdemo.Event<java.lang.String>".equals(getTypeToken().getType().toString())) {
String _value = value.split("\"value\":")[1];
_value = _value.substring(0, _value.length() - 1);
Event t = JsonConvert.root().convertFrom(getTypeToken().getType(), value.replace(_value, ""));
t.setValue(_value);
accept((T) t);
} else {
Event t = JsonConvert.root().convertFrom(getTypeToken().getType(), value);
accept((T) t);
}
}
}

View File

@@ -5,7 +5,6 @@ import com.zdemo.IConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.redkale.convert.json.JsonConvert;
import org.redkale.net.http.RestService;
import org.redkale.service.Service;
import org.redkale.util.AnyValue;
@@ -43,14 +42,13 @@ public abstract class KafakConsumer<T extends Event> implements IConsumer<T>, Se
consumer.subscribe(getSubscribes());
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
String value = record.value();
try {
logger.finest(String.format("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()));
T t = JsonConvert.root().convertFrom(getTypeToken().getType(), record.value());
accept(t);
accept(value);
} catch (Exception e) {
logger.warning("event accept error :" + value);
e.printStackTrace();
}
}

View File

@@ -2,7 +2,6 @@ package com.zdemo.redis;
import com.zdemo.Event;
import com.zdemo.IConsumer;
import org.redkale.convert.json.JsonConvert;
import org.redkale.service.Service;
import org.redkale.util.AnyValue;
@@ -61,10 +60,9 @@ public abstract class RedisConsumer<T extends Event> implements IConsumer<T>, Se
br.readLine(); //$n len(value)
String value = br.readLine(); // value
try {
T t = JsonConvert.root().convertFrom(getTypeToken().getType(), value);
accept(t);
accept(value);
} catch (Exception e) {
logger.warning("event fmt error :" + value);
logger.warning("event accept error :" + value);
e.printStackTrace();
}
}