我向OpenFire注册了一个外部组件。当我的组件关闭时,它将保留在OpenFire服务器中。当我重新启动该组件时,客户端的消息无法获得该组件的完整响应。因为某些组件节点已经死了。
那么如何删除失效的组件节点?重新启动OpenFire。
我的组件代码如下:
@Test
public void testGamma() throws ComponentException, InterruptedException {
ExternalComponentManager componentManager = new ExternalComponentManager("172.16.5.254");
componentManager.setSecretKey("MyBot", "mypwd");
componentManager.setMultipleAllowed("MyBot", true);
componentManager.addComponent("MyBot", new MyRobot());
Thread.currentThread().join();
}
static class MyRobot extends AbstractComponent {
@Override
public String getDescription() {
return "This is my bot";
}
@Override
public String getName() {
return "MyWonderfulRobot";
}
@Override
protected void handleMessage(org.xmpp.packet.Message message) {
System.out.println("==================");
send(new org.xmpp.packet.Message() {{
this.setID(message.getID());
this.setFrom(message.getTo());
this.setTo(message.getFrom());
this.setType(message.getType());
this.setBody(message.getBody());
}});
System.out.println(message);
}
}
答案 0 :(得分:0)
Openfire可能看不到TCP连接被关闭。在最终删除该组件之前,它将等待超时(但这可能需要几分钟)。
您可以通过在关机过程中调用componentManager.removeComponent("MyBot");
来避免此问题。