如何删除OpenFire XMPP服务器的外部组件?

时间:2018-11-28 09:09:16

标签: components xmpp openfire shutdown

我向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);
    }
}

1 个答案:

答案 0 :(得分:0)

Openfire可能看不到TCP连接被关闭。在最终删除该组件之前,它将等待超时(但这可能需要几分钟)。

您可以通过在关机过程中调用componentManager.removeComponent("MyBot");来避免此问题。