com.sitewhere.grpc.client.MultitenantGrpcChannel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sitewhere-grpc-client Show documentation
Show all versions of sitewhere-grpc-client Show documentation
SiteWhere gRPC Client Components
/*
* Copyright (c) SiteWhere, LLC. All rights reserved. http://www.sitewhere.com
*
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package com.sitewhere.grpc.client;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.sitewhere.grpc.client.spi.multitenant.IMultitenantGrpcChannel;
import com.sitewhere.spi.SiteWhereException;
import com.sitewhere.spi.microservice.IFunctionIdentifier;
import com.sitewhere.spi.microservice.grpc.IGrpcServiceIdentifier;
import com.sitewhere.spi.microservice.instance.IInstanceSettings;
import com.sitewhere.spi.microservice.lifecycle.ILifecycleProgressMonitor;
import io.grpc.ManagedChannelBuilder;
/**
* Management wrapper for a GRPC channel that handles requests for multiple
* tenants.
*
* @param
* @param
*/
public abstract class MultitenantGrpcChannel extends GrpcChannel implements IMultitenantGrpcChannel {
/** Max threads used for executing GPRC requests */
private static final int THREAD_POOL_SIZE = 25;
/** Client interceptor for adding tenant token */
private TenantTokenClientInterceptor tenantTokenInterceptor = new TenantTokenClientInterceptor();
/** Executor service used to handle GRPC requests */
private ExecutorService serverExecutor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
public MultitenantGrpcChannel(IInstanceSettings settings, IFunctionIdentifier identifier,
IGrpcServiceIdentifier grpcServiceIdentifier, int port) {
super(settings, identifier, grpcServiceIdentifier, port);
}
/*
* (non-Javadoc)
*
* @see
* com.sitewhere.server.lifecycle.LifecycleComponent#start(com.sitewhere.spi
* .server.lifecycle.ILifecycleProgressMonitor)
*/
@Override
public void start(ILifecycleProgressMonitor monitor) throws SiteWhereException {
ManagedChannelBuilder> builder = ManagedChannelBuilder.forAddress(getHostname(), getPort());
builder.defaultServiceConfig(buildServiceConfiguration()).enableRetry();
builder.executor(getServerExecutor());
builder.usePlaintext().intercept(getTenantTokenInterceptor()).intercept(getJwtInterceptor());
this.channel = builder.build();
this.blockingStub = createBlockingStub();
this.asyncStub = createAsyncStub();
getLogger()
.info(String.format("Creating gRPC client channel connected to %s:%d ...", getHostname(), getPort()));
}
protected TenantTokenClientInterceptor getTenantTokenInterceptor() {
return tenantTokenInterceptor;
}
protected void setTenantTokenInterceptor(TenantTokenClientInterceptor tenantTokenInterceptor) {
this.tenantTokenInterceptor = tenantTokenInterceptor;
}
public ExecutorService getServerExecutor() {
return serverExecutor;
}
public void setServerExecutor(ExecutorService serverExecutor) {
this.serverExecutor = serverExecutor;
}
}