This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
The following commit(s) were added to refs/heads/master by this push: new ef63bc6 The heartbeat implementation for all the scopes. (#1742) ef63bc6 is described below commit ef63bc63cbda1cc326b2986f4fa338b2fd4df1e9 Author: 彭勇升 pengys <8082...@qq.com> AuthorDate: Wed Oct 10 16:25:50 2018 +0800 The heartbeat implementation for all the scopes. (#1742) --- .../oap/server/core/alarm/provider/Rules.java | 11 ++-- .../server/core/alarm/provider/RulesReader.java | 70 +++++++++++----------- .../service/EndpointInventoryRegister.java | 12 ++++ .../service/IEndpointInventoryRegister.java | 2 + .../service/INetworkAddressInventoryRegister.java | 2 + .../service/IServiceInstanceInventoryRegister.java | 2 + .../service/IServiceInventoryRegister.java | 2 + .../service/NetworkAddressInventoryRegister.java | 15 +++++ .../service/ServiceInstanceInventoryRegister.java | 30 ++++++---- .../register/service/ServiceInventoryRegister.java | 15 +++++ .../register/worker/RegisterPersistentWorker.java | 2 +- .../v5/InstanceDiscoveryServiceHandler.java | 12 ++-- .../handler/v5/InstanceHeartBeatTestCase.java} | 19 ++++-- 13 files changed, 131 insertions(+), 63 deletions(-) diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/Rules.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/Rules.java index bfbced0..e7a2e34 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/Rules.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/Rules.java @@ -18,14 +18,17 @@ package org.apache.skywalking.oap.server.core.alarm.provider; -import java.util.List; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.Setter; +import java.util.*; +import lombok.*; @Setter(AccessLevel.PUBLIC) @Getter(AccessLevel.PUBLIC) public class Rules { private List<AlarmRule> rules; private List<String> webhooks; + + public Rules() { + this.rules = new ArrayList<>(); + this.webhooks = new ArrayList<>(); + } } diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java index e2a2873..897d892 100644 --- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java +++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RulesReader.java @@ -18,11 +18,8 @@ package org.apache.skywalking.oap.server.core.alarm.provider; -import java.io.InputStream; -import java.io.Reader; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.io.*; +import java.util.*; import org.yaml.snakeyaml.Yaml; /** @@ -46,39 +43,42 @@ public class RulesReader { public Rules readRules() { Rules rules = new Rules(); - Map rulesData = (Map)yamlData.get("rules"); - if (rulesData != null) { - rules.setRules(new ArrayList<>()); - rulesData.forEach((k, v) -> { - if (((String)k).endsWith("_rule")) { - AlarmRule alarmRule = new AlarmRule(); - alarmRule.setAlarmRuleName((String)k); - Map settings = (Map)v; - Object indicatorName = settings.get("indicator-name"); - if (indicatorName == null) { - throw new IllegalArgumentException("indicator-name can't be null"); - } + if (Objects.nonNull(yamlData)) { + Map rulesData = (Map)yamlData.get("rules"); + if (rulesData != null) { + rules.setRules(new ArrayList<>()); + rulesData.forEach((k, v) -> { + if (((String)k).endsWith("_rule")) { + AlarmRule alarmRule = new AlarmRule(); + alarmRule.setAlarmRuleName((String)k); + Map settings = (Map)v; + Object indicatorName = settings.get("indicator-name"); + if (indicatorName == null) { + throw new IllegalArgumentException("indicator-name can't be null"); + } - alarmRule.setIndicatorName((String)indicatorName); - alarmRule.setIncludeNames((ArrayList)settings.getOrDefault("include-names", new ArrayList(0))); - alarmRule.setThreshold(settings.get("threshold").toString()); - alarmRule.setOp((String)settings.get("op")); - alarmRule.setPeriod((Integer)settings.getOrDefault("period", 1)); - alarmRule.setCount((Integer)settings.getOrDefault("count", 1)); - alarmRule.setSilencePeriod((Integer)settings.getOrDefault("silence-period", alarmRule.getPeriod())); - alarmRule.setMessage((String)settings.getOrDefault("message", "Alarm caused by Rule " + alarmRule.getAlarmRuleName())); + alarmRule.setIndicatorName((String)indicatorName); + alarmRule.setIncludeNames((ArrayList)settings.getOrDefault("include-names", new ArrayList(0))); + alarmRule.setThreshold(settings.get("threshold").toString()); + alarmRule.setOp((String)settings.get("op")); + alarmRule.setPeriod((Integer)settings.getOrDefault("period", 1)); + alarmRule.setCount((Integer)settings.getOrDefault("count", 1)); + alarmRule.setSilencePeriod((Integer)settings.getOrDefault("silence-period", alarmRule.getPeriod())); + alarmRule.setMessage((String)settings.getOrDefault("message", "Alarm caused by Rule " + alarmRule.getAlarmRuleName())); - rules.getRules().add(alarmRule); - } - }); - } - List webhooks = (List)yamlData.get("webhooks"); - if (webhooks != null) { - rules.setWebhooks(new ArrayList<>()); - webhooks.forEach(url -> { - rules.getWebhooks().add((String)url); - }); + rules.getRules().add(alarmRule); + } + }); + } + List webhooks = (List)yamlData.get("webhooks"); + if (webhooks != null) { + rules.setWebhooks(new ArrayList<>()); + webhooks.forEach(url -> { + rules.getWebhooks().add((String)url); + }); + } } + return rules; } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/EndpointInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/EndpointInventoryRegister.java index 895f421..eb361f5 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/EndpointInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/EndpointInventoryRegister.java @@ -18,6 +18,7 @@ package org.apache.skywalking.oap.server.core.register.service; +import java.util.Objects; import org.apache.skywalking.oap.server.core.*; import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache; import org.apache.skywalking.oap.server.core.register.EndpointInventory; @@ -70,4 +71,15 @@ public class EndpointInventoryRegister implements IEndpointInventoryRegister { @Override public int get(int serviceId, String endpointName) { return getCacheService().getEndpointId(serviceId, endpointName); } + + @Override public void heartbeat(int endpointId, long heartBeatTime) { + EndpointInventory endpointInventory = getCacheService().get(endpointId); + if (Objects.nonNull(endpointInventory)) { + endpointInventory.setHeartbeatTime(heartBeatTime); + + InventoryProcess.INSTANCE.in(endpointInventory); + } else { + logger.warn("Endpoint {} heartbeat, but not found in storage."); + } + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java index 2258aac..2a71461 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java @@ -29,4 +29,6 @@ public interface IEndpointInventoryRegister extends Service { int getOrCreate(int serviceId, String endpointName, DetectPoint detectPoint); int get(int serviceId, String endpointName); + + void heartbeat(int endpointId, long heartBeatTime); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java index eb3b375..f812f58 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/INetworkAddressInventoryRegister.java @@ -29,4 +29,6 @@ public interface INetworkAddressInventoryRegister extends Service { int get(String networkAddress); void update(int addressId, int srcLayer, int serverType); + + void heartbeat(int addressId, long heartBeatTime); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java index acee9a8..7ed7b4e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInstanceInventoryRegister.java @@ -30,4 +30,6 @@ public interface IServiceInstanceInventoryRegister extends Service { ServiceInstanceInventory.AgentOsInfo osInfo); int getOrCreate(int serviceId, int addressId, long registerTime); + + void heartbeat(int serviceInstanceId, long heartBeatTime); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java index 1667c61..a31b270 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java @@ -28,4 +28,6 @@ public interface IServiceInventoryRegister extends Service { int getOrCreate(String serviceName); int getOrCreate(int addressId); + + void heartbeat(int serviceId, long heartBeatTime); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java index d4ea429..e702d67 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java @@ -18,11 +18,13 @@ package org.apache.skywalking.oap.server.core.register.service; +import java.util.Objects; import org.apache.skywalking.oap.server.core.*; import org.apache.skywalking.oap.server.core.cache.NetworkAddressInventoryCache; import org.apache.skywalking.oap.server.core.register.NetworkAddressInventory; import org.apache.skywalking.oap.server.core.register.worker.InventoryProcess; import org.apache.skywalking.oap.server.library.module.ModuleManager; +import org.slf4j.*; import static java.util.Objects.*; @@ -31,6 +33,8 @@ import static java.util.Objects.*; */ public class NetworkAddressInventoryRegister implements INetworkAddressInventoryRegister { + private static final Logger logger = LoggerFactory.getLogger(NetworkAddressInventoryRegister.class); + private final ModuleManager moduleManager; private NetworkAddressInventoryCache networkAddressInventoryCache; private IServiceInventoryRegister serviceInventoryRegister; @@ -111,4 +115,15 @@ public class NetworkAddressInventoryRegister implements INetworkAddressInventory } return true; } + + @Override public void heartbeat(int addressId, long heartBeatTime) { + NetworkAddressInventory networkAddress = getNetworkAddressInventoryCache().get(addressId); + if (Objects.nonNull(networkAddress)) { + networkAddress.setHeartbeatTime(heartBeatTime); + + InventoryProcess.INSTANCE.in(networkAddress); + } else { + logger.warn("Network address {} heartbeat, but not found in storage."); + } + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java index bf67627..af02992 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInstanceInventoryRegister.java @@ -18,11 +18,11 @@ package org.apache.skywalking.oap.server.core.register.service; -import org.apache.skywalking.oap.server.core.Const; +import java.util.Objects; +import org.apache.skywalking.oap.server.core.*; +import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache; import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory; import org.apache.skywalking.oap.server.core.register.worker.InventoryProcess; -import org.apache.skywalking.oap.server.core.storage.StorageModule; -import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO; import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.library.util.BooleanUtils; import org.slf4j.*; @@ -37,17 +37,17 @@ public class ServiceInstanceInventoryRegister implements IServiceInstanceInvento private static final Logger logger = LoggerFactory.getLogger(ServiceInstanceInventoryRegister.class); private final ModuleManager moduleManager; - private IServiceInstanceInventoryCacheDAO cacheDAO; + private ServiceInstanceInventoryCache serviceInstanceInventoryCache; public ServiceInstanceInventoryRegister(ModuleManager moduleManager) { this.moduleManager = moduleManager; } - private IServiceInstanceInventoryCacheDAO getCacheDAO() { - if (isNull(cacheDAO)) { - cacheDAO = moduleManager.find(StorageModule.NAME).getService(IServiceInstanceInventoryCacheDAO.class); + private ServiceInstanceInventoryCache getServiceInstanceInventoryCache() { + if (isNull(serviceInstanceInventoryCache)) { + serviceInstanceInventoryCache = moduleManager.find(CoreModule.NAME).getService(ServiceInstanceInventoryCache.class); } - return cacheDAO; + return serviceInstanceInventoryCache; } @Override public int getOrCreate(int serviceId, String serviceInstanceName, long registerTime, @@ -56,7 +56,7 @@ public class ServiceInstanceInventoryRegister implements IServiceInstanceInvento logger.debug("Get or create service instance by service instance name, service id: {}, service instance name: {}, registerTime: {}", serviceId, serviceInstanceName, registerTime); } - int serviceInstanceId = getCacheDAO().getServiceInstanceId(serviceId, serviceInstanceName); + int serviceInstanceId = getServiceInstanceInventoryCache().getServiceInstanceId(serviceId, serviceInstanceName); if (serviceInstanceId == Const.NONE) { ServiceInstanceInventory serviceInstanceInventory = new ServiceInstanceInventory(); @@ -83,7 +83,7 @@ public class ServiceInstanceInventoryRegister implements IServiceInstanceInvento logger.debug("get or create service instance by address id, service id: {}, address id: {}, registerTime: {}", serviceId, addressId, registerTime); } - int serviceInstanceId = getCacheDAO().getServiceInstanceId(serviceId, addressId); + int serviceInstanceId = getServiceInstanceInventoryCache().getServiceInstanceId(serviceId, addressId); if (serviceInstanceId == Const.NONE) { ServiceInstanceInventory serviceInstanceInventory = new ServiceInstanceInventory(); @@ -99,4 +99,14 @@ public class ServiceInstanceInventoryRegister implements IServiceInstanceInvento } return serviceInstanceId; } + + @Override public void heartbeat(int serviceInstanceId, long heartBeatTime) { + ServiceInstanceInventory serviceInstanceInventory = getServiceInstanceInventoryCache().get(serviceInstanceId); + if (Objects.nonNull(serviceInstanceInventory)) { + serviceInstanceInventory.setHeartbeatTime(heartBeatTime); + InventoryProcess.INSTANCE.in(serviceInstanceInventory); + } else { + logger.warn("Service instance {} heartbeat, but not found in storage."); + } + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java index 6b22eb4..62e8ab6 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java @@ -18,12 +18,14 @@ package org.apache.skywalking.oap.server.core.register.service; +import java.util.Objects; import org.apache.skywalking.oap.server.core.*; import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache; import org.apache.skywalking.oap.server.core.register.ServiceInventory; import org.apache.skywalking.oap.server.core.register.worker.InventoryProcess; import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.library.util.BooleanUtils; +import org.slf4j.*; import static java.util.Objects.isNull; @@ -32,6 +34,8 @@ import static java.util.Objects.isNull; */ public class ServiceInventoryRegister implements IServiceInventoryRegister { + private static final Logger logger = LoggerFactory.getLogger(ServiceInventoryRegister.class); + private final ModuleManager moduleManager; private ServiceInventoryCache serviceInventoryCache; @@ -81,4 +85,15 @@ public class ServiceInventoryRegister implements IServiceInventoryRegister { } return serviceId; } + + @Override public void heartbeat(int serviceId, long heartBeatTime) { + ServiceInventory serviceInventory = getServiceInventoryCache().get(serviceId); + if (Objects.nonNull(serviceInventory)) { + serviceInventory.setHeartbeatTime(heartBeatTime); + + InventoryProcess.INSTANCE.in(serviceInventory); + } else { + logger.warn("Service {} heartbeat, but not found in storage."); + } + } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java index c4283f0..cfed8c3 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java @@ -62,7 +62,7 @@ public class RegisterPersistentWorker extends AbstractWorker<RegisterSource> { try { RegisterSource newSource = registerDAO.get(modelName, source.id()); if (Objects.nonNull(newSource)) { - newSource.combine(newSource); + newSource.combine(source); registerDAO.forceUpdate(modelName, newSource); } else { int sequence = registerDAO.max(modelName); diff --git a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/InstanceDiscoveryServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/InstanceDiscoveryServiceHandler.java index 4295b09..11681f1 100644 --- a/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/InstanceDiscoveryServiceHandler.java +++ b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/InstanceDiscoveryServiceHandler.java @@ -35,11 +35,9 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp private static final Logger logger = LoggerFactory.getLogger(InstanceDiscoveryServiceHandler.class); private final IServiceInstanceInventoryRegister serviceInstanceInventoryRegister; -// private final IInstanceHeartBeatService instanceHeartBeatService; public InstanceDiscoveryServiceHandler(ModuleManager moduleManager) { this.serviceInstanceInventoryRegister = moduleManager.find(CoreModule.NAME).getService(IServiceInstanceInventoryRegister.class); -// this.instanceHeartBeatService = moduleManager.find(CoreModule.NAME).getService(IInstanceHeartBeatService.class); } @Override @@ -61,10 +59,10 @@ public class InstanceDiscoveryServiceHandler extends InstanceDiscoveryServiceGrp } @Override public void heartbeat(ApplicationInstanceHeartbeat request, StreamObserver<Downstream> responseObserver) { -// int instanceId = request.getApplicationInstanceId(); -// long heartBeatTime = request.getHeartbeatTime(); -// this.instanceHeartBeatService.heartBeat(instanceId, heartBeatTime); -// responseObserver.onNext(Downstream.getDefaultInstance()); -// responseObserver.onCompleted(); + int serviceInstanceId = request.getApplicationInstanceId(); + long heartBeatTime = request.getHeartbeatTime(); + serviceInstanceInventoryRegister.heartbeat(serviceInstanceId, heartBeatTime); + responseObserver.onNext(Downstream.getDefaultInstance()); + responseObserver.onCompleted(); } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/InstanceHeartBeatTestCase.java similarity index 51% copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java copy to oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/InstanceHeartBeatTestCase.java index 2258aac..4f31c0a 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IEndpointInventoryRegister.java +++ b/oap-server/server-receiver-plugin/skywalking-register-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v5/InstanceHeartBeatTestCase.java @@ -16,17 +16,24 @@ * */ -package org.apache.skywalking.oap.server.core.register.service; +package org.apache.skywalking.oap.server.receiver.register.provider.handler.v5; -import org.apache.skywalking.oap.server.core.source.DetectPoint; -import org.apache.skywalking.oap.server.library.module.Service; +import io.grpc.*; +import org.apache.skywalking.apm.network.language.agent.*; /** * @author peng-yongsheng */ -public interface IEndpointInventoryRegister extends Service { +public class InstanceHeartBeatTestCase { - int getOrCreate(int serviceId, String endpointName, DetectPoint detectPoint); + public static void main(String[] args) { + ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).usePlaintext(true).build(); - int get(int serviceId, String endpointName); + InstanceDiscoveryServiceGrpc.InstanceDiscoveryServiceBlockingStub stub = InstanceDiscoveryServiceGrpc.newBlockingStub(channel); + + ApplicationInstanceHeartbeat.Builder builder = ApplicationInstanceHeartbeat.newBuilder(); + builder.setApplicationInstanceId(2); + builder.setHeartbeatTime(System.currentTimeMillis() + 5 * 1000 * 60); + Downstream heartbeat = stub.heartbeat(builder.build()); + } }