diff --git a/src/main/java/biz/nynja/account/services/erlang/ErlangAccountMqttBridge.java b/src/main/java/biz/nynja/account/services/erlang/ErlangAccountMqttBridge.java index 310c27dcfe33aa6e659607c489cd8630ff7acda0..80b88a78477aff2fc035b9c221109e33d54fc7c9 100644 --- a/src/main/java/biz/nynja/account/services/erlang/ErlangAccountMqttBridge.java +++ b/src/main/java/biz/nynja/account/services/erlang/ErlangAccountMqttBridge.java @@ -18,20 +18,42 @@ import io.grpc.stub.MetadataUtils; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; +import javax.annotation.PreDestroy; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Component @Primary -public class ErlangAccountMqttBridge implements ErlangAccountBridge { +public class ErlangAccountMqttBridge implements ErlangAccountBridge, AutoCloseable { private static final String EMAIL_PROVIDER = "EMAIL"; private static final String PHONE_PROVIDER = "PHONE"; private final ErlangBridgeConfiguration configuration; + private final AccountBridgeGrpc.AccountBridgeBlockingStub bridgeService; + private final ManagedChannel channel; public ErlangAccountMqttBridge(ErlangBridgeConfiguration configuration) { this.configuration = configuration; + channel = ManagedChannelBuilder + .forAddress(configuration.getHost(), Integer.parseInt(configuration.getPort())) + .usePlaintext() + .build(); + bridgeService = AccountBridgeGrpc.newBlockingStub(channel); + } + + @PreDestroy + @Override + public void close() throws Exception { + channel.shutdown(); + while (!channel.isTerminated()) { + try { + channel.awaitTermination(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + // Nothing to do + } + } } @Override @@ -145,12 +167,6 @@ public class ErlangAccountMqttBridge implements ErlangAccountBridge { } private AccountBridgeGrpc.AccountBridgeBlockingStub buildGrpcConnection() { - ManagedChannel managedChannel = ManagedChannelBuilder - .forAddress(configuration.getHost(), Integer.parseInt(configuration.getPort())) - .usePlaintext() - .build(); - AccountBridgeGrpc.AccountBridgeBlockingStub bridgeService = - AccountBridgeGrpc.newBlockingStub(managedChannel); return MetadataUtils.attachHeaders(bridgeService, getHeaders()); }