【发布时间】:2017-05-12 18:40:10
【问题描述】:
我有一个 Flink 作业从 Kafka 队列读取事件,然后在满足某些条件时调用另一个服务。
我想使用 Retrofit2 来调用该服务的 REST 端点,但我得到一个不可序列化的异常。我有几个相互连接的平面地图(串联),然后在最后一个平面地图中调用服务。我得到的例外:
线程“main”中的异常 org.apache.flink.api.common.InvalidProgramException: RichFlatMapFunction 的实现不可序列化。这 对象可能包含或引用不可序列化的字段。
...
引起:java.io.NotSerializableException:retrofit2.Retrofit$1
...
我初始化改造的方式:
RetrofitClient.getClient(BASE_URL).create(NotificationService.class);
还有 NotificationService 接口
public interface NotificationService {
@PUT("/test")
Call<String> putNotification(@Body Notification notification);
}
RetrofitClient 类
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if (retrofit == null) {
retrofit = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
【问题讨论】:
标签: retrofit retrofit2 apache-flink flink-streaming