Как удалить внешний компонент сервера OpenFire XMPP? - PullRequest
0 голосов
/ 28 ноября 2018

Я зарегистрировал внешний компонент в 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 голосов
/ 15 января 2019

Openfire, вероятно, не видит закрытое соединение TCP.Он будет ждать тайм-аут, прежде чем в конечном итоге удалит компонент (но это может занять несколько минут).

Вы можете предотвратить эту проблему, вызвав componentManager.removeComponent("MyBot"); как часть вашего отключения.

...