当我尝试通过StormSubmitter提交我的拓扑时,我得到了 -
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
Run Code Online (Sandbox Code Playgroud)
我正在使用Spring.
我没有在Spout/Bolt构造函数中初始化HttpClient.相反,它是在一个类的构造函数中初始化的,该类是从Spring的上下文中获取prepare()的
代码结构如下 -
SomeBolt.java
@Component
public class SomeBolt extends BaseRichBolt {
private OutputCollector _collector;
private SomeClient someClient;
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
_collector = collector;
someClient = AppContext.getBean(SomeClient.class);
}
}
Run Code Online (Sandbox Code Playgroud)
SomeClient.java
@Component
public class SomeClient {
private final CloseableHttpClient httpClient;
public SomeClient() {
this.httpClient = (httpClient == null ? HttpClients.createDefault() : httpClient);
}
}
Run Code Online (Sandbox Code Playgroud)
AppContext.java
@Component
public class AppContext implements ApplicationContextAware {
private static …Run Code Online (Sandbox Code Playgroud) 在我们的一个包含1个喷口和1个螺栓的拓扑结构中 - 我有一种预感,即螺栓正在完成(并且正在进行),但喷嘴仍然失效.
我尝试通过如下的TaskHook来确认这一点 -
public class BaseHook extends BaseTaskHook {
private Logger logger;
private String topology;
private String component;
public BaseHook(String component) {
this.component = component;
}
@Override
public void prepare(Map conf, TopologyContext context) {
logger = LoggerFactory.getLogger(this.getClass());
this.topology = (String) conf.get("topology.name");
}
@Override
public void emit(EmitInfo info) {
log("EMITTED >> Value = " + info.values);
}
@Override
public void spoutAck(SpoutAckInfo info) {
log("ACKED >> Tuple = " + info.messageId + ", Latency = " + info.completeLatencyMs);
}
@Override …Run Code Online (Sandbox Code Playgroud)