Improved Edge handling in case connect/disconnect. Speed up initial setup
This commit is contained in:
parent
3eaa885f89
commit
3860d79613
@ -43,19 +43,6 @@ volumes:
|
|||||||
Execute the following command to start upgrade process:
|
Execute the following command to start upgrade process:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose -f docker-compose-upgrade.yml up
|
docker compose -f docker-compose-upgrade.yml up --abort-on-container-exit
|
||||||
{:copy-code}
|
|
||||||
```
|
|
||||||
|
|
||||||
Once upgrade process successfully completed, exit from the docker-compose shell by this combination:
|
|
||||||
|
|
||||||
```text
|
|
||||||
Ctrl + C
|
|
||||||
```
|
|
||||||
|
|
||||||
Execute the following command to stop TB Edge upgrade container:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker compose -f docker-compose-upgrade.yml stop
|
|
||||||
{:copy-code}
|
{:copy-code}
|
||||||
```
|
```
|
||||||
@ -404,6 +404,9 @@ public class EdgeGrpcService extends EdgeRpcServiceGrpc.EdgeRpcServiceImplBase i
|
|||||||
private void scheduleEdgeEventsCheck(EdgeGrpcSession session) {
|
private void scheduleEdgeEventsCheck(EdgeGrpcSession session) {
|
||||||
EdgeId edgeId = session.getEdge().getId();
|
EdgeId edgeId = session.getEdge().getId();
|
||||||
TenantId tenantId = session.getEdge().getTenantId();
|
TenantId tenantId = session.getEdge().getTenantId();
|
||||||
|
|
||||||
|
cancelScheduleEdgeEventsCheck(edgeId);
|
||||||
|
|
||||||
if (sessions.containsKey(edgeId)) {
|
if (sessions.containsKey(edgeId)) {
|
||||||
ScheduledFuture<?> edgeEventCheckTask = edgeEventProcessingExecutorService.schedule(() -> {
|
ScheduledFuture<?> edgeEventCheckTask = edgeEventProcessingExecutorService.schedule(() -> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -448,7 +448,11 @@ public abstract class EdgeGrpcSession implements Closeable {
|
|||||||
private void scheduleDownlinkMsgsPackSend(int attempt) {
|
private void scheduleDownlinkMsgsPackSend(int attempt) {
|
||||||
Runnable sendDownlinkMsgsTask = () -> {
|
Runnable sendDownlinkMsgsTask = () -> {
|
||||||
try {
|
try {
|
||||||
if (isConnected() && !sessionState.getPendingMsgsMap().values().isEmpty()) {
|
if (!isConnected()) {
|
||||||
|
stopCurrentSendDownlinkMsgsTask(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!sessionState.getPendingMsgsMap().values().isEmpty()) {
|
||||||
List<DownlinkMsg> copy = new ArrayList<>(sessionState.getPendingMsgsMap().values());
|
List<DownlinkMsg> copy = new ArrayList<>(sessionState.getPendingMsgsMap().values());
|
||||||
if (attempt > 1) {
|
if (attempt > 1) {
|
||||||
String error = "Failed to deliver the batch";
|
String error = "Failed to deliver the batch";
|
||||||
@ -525,11 +529,11 @@ public abstract class EdgeGrpcSession implements Closeable {
|
|||||||
private void onDownlinkResponse(DownlinkResponseMsg msg) {
|
private void onDownlinkResponse(DownlinkResponseMsg msg) {
|
||||||
try {
|
try {
|
||||||
if (msg.getSuccess()) {
|
if (msg.getSuccess()) {
|
||||||
sessionState.getPendingMsgsMap().remove(msg.getDownlinkMsgId());
|
|
||||||
log.debug("[{}][{}][{}] Msg has been processed successfully! Msg Id: [{}], Msg: {}", tenantId, edge.getId(), sessionId, msg.getDownlinkMsgId(), msg);
|
log.debug("[{}][{}][{}] Msg has been processed successfully! Msg Id: [{}], Msg: {}", tenantId, edge.getId(), sessionId, msg.getDownlinkMsgId(), msg);
|
||||||
} else {
|
} else {
|
||||||
log.error("[{}][{}][{}] Msg processing failed! Msg Id: [{}], Error msg: {}", tenantId, edge.getId(), sessionId, msg.getDownlinkMsgId(), msg.getErrorMsg());
|
log.error("[{}][{}][{}] Msg processing failed! Msg Id: [{}], Error msg: {}", tenantId, edge.getId(), sessionId, msg.getDownlinkMsgId(), msg.getErrorMsg());
|
||||||
}
|
}
|
||||||
|
sessionState.getPendingMsgsMap().remove(msg.getDownlinkMsgId());
|
||||||
if (sessionState.getPendingMsgsMap().isEmpty()) {
|
if (sessionState.getPendingMsgsMap().isEmpty()) {
|
||||||
log.debug("[{}][{}][{}] Pending msgs map is empty. Stopping current iteration", tenantId, edge.getId(), sessionId);
|
log.debug("[{}][{}][{}] Pending msgs map is empty. Stopping current iteration", tenantId, edge.getId(), sessionId);
|
||||||
stopCurrentSendDownlinkMsgsTask(false);
|
stopCurrentSendDownlinkMsgsTask(false);
|
||||||
|
|||||||
@ -41,7 +41,10 @@ public abstract class BaseDashboardProcessor extends BaseEdgeProcessor {
|
|||||||
if (dashboard == null) {
|
if (dashboard == null) {
|
||||||
throw new RuntimeException("[{" + tenantId + "}] dashboardUpdateMsg {" + dashboardUpdateMsg + "} cannot be converted to dashboard");
|
throw new RuntimeException("[{" + tenantId + "}] dashboardUpdateMsg {" + dashboardUpdateMsg + "} cannot be converted to dashboard");
|
||||||
}
|
}
|
||||||
Set<ShortCustomerInfo> newAssignedCustomers = new HashSet<>(dashboard.getAssignedCustomers());
|
Set<ShortCustomerInfo> newAssignedCustomers = new HashSet<>();
|
||||||
|
if (dashboard.getAssignedCustomers() != null && !dashboard.getAssignedCustomers().isEmpty()) {
|
||||||
|
newAssignedCustomers.addAll(dashboard.getAssignedCustomers());
|
||||||
|
}
|
||||||
Dashboard dashboardById = edgeCtx.getDashboardService().findDashboardById(tenantId, dashboardId);
|
Dashboard dashboardById = edgeCtx.getDashboardService().findDashboardById(tenantId, dashboardId);
|
||||||
if (dashboardById == null) {
|
if (dashboardById == null) {
|
||||||
created = true;
|
created = true;
|
||||||
|
|||||||
@ -28,17 +28,22 @@ import org.thingsboard.server.gen.edge.v1.WidgetBundleTypesRequestMsg;
|
|||||||
|
|
||||||
public interface EdgeRequestsService {
|
public interface EdgeRequestsService {
|
||||||
|
|
||||||
|
@Deprecated(since = "3.9.1", forRemoval = true)
|
||||||
ListenableFuture<Void> processRuleChainMetadataRequestMsg(TenantId tenantId, Edge edge, RuleChainMetadataRequestMsg ruleChainMetadataRequestMsg);
|
ListenableFuture<Void> processRuleChainMetadataRequestMsg(TenantId tenantId, Edge edge, RuleChainMetadataRequestMsg ruleChainMetadataRequestMsg);
|
||||||
|
|
||||||
ListenableFuture<Void> processAttributesRequestMsg(TenantId tenantId, Edge edge, AttributesRequestMsg attributesRequestMsg);
|
ListenableFuture<Void> processAttributesRequestMsg(TenantId tenantId, Edge edge, AttributesRequestMsg attributesRequestMsg);
|
||||||
|
|
||||||
ListenableFuture<Void> processRelationRequestMsg(TenantId tenantId, Edge edge, RelationRequestMsg relationRequestMsg);
|
ListenableFuture<Void> processRelationRequestMsg(TenantId tenantId, Edge edge, RelationRequestMsg relationRequestMsg);
|
||||||
|
|
||||||
|
@Deprecated(since = "3.9.1", forRemoval = true)
|
||||||
ListenableFuture<Void> processDeviceCredentialsRequestMsg(TenantId tenantId, Edge edge, DeviceCredentialsRequestMsg deviceCredentialsRequestMsg);
|
ListenableFuture<Void> processDeviceCredentialsRequestMsg(TenantId tenantId, Edge edge, DeviceCredentialsRequestMsg deviceCredentialsRequestMsg);
|
||||||
|
|
||||||
|
@Deprecated(since = "3.9.1", forRemoval = true)
|
||||||
ListenableFuture<Void> processUserCredentialsRequestMsg(TenantId tenantId, Edge edge, UserCredentialsRequestMsg userCredentialsRequestMsg);
|
ListenableFuture<Void> processUserCredentialsRequestMsg(TenantId tenantId, Edge edge, UserCredentialsRequestMsg userCredentialsRequestMsg);
|
||||||
|
|
||||||
|
@Deprecated(since = "3.9.1", forRemoval = true)
|
||||||
ListenableFuture<Void> processWidgetBundleTypesRequestMsg(TenantId tenantId, Edge edge, WidgetBundleTypesRequestMsg widgetBundleTypesRequestMsg);
|
ListenableFuture<Void> processWidgetBundleTypesRequestMsg(TenantId tenantId, Edge edge, WidgetBundleTypesRequestMsg widgetBundleTypesRequestMsg);
|
||||||
|
|
||||||
|
@Deprecated(since = "3.9.1", forRemoval = true)
|
||||||
ListenableFuture<Void> processEntityViewsRequestMsg(TenantId tenantId, Edge edge, EntityViewsRequestMsg entityViewsRequestMsg);
|
ListenableFuture<Void> processEntityViewsRequestMsg(TenantId tenantId, Edge edge, EntityViewsRequestMsg entityViewsRequestMsg);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,12 +48,14 @@ public class DashboardEdgeTest extends AbstractEdgeTest {
|
|||||||
private static final int MOBILE_ORDER = 5;
|
private static final int MOBILE_ORDER = 5;
|
||||||
private static final String IMAGE = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+";
|
private static final String IMAGE = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+";
|
||||||
|
|
||||||
|
private static final String DASHBOARD_TITLE = "Edge Test Dashboard";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDashboards() throws Exception {
|
public void testDashboards() throws Exception {
|
||||||
// create dashboard and assign to edge
|
// create dashboard and assign to edge
|
||||||
edgeImitator.expectMessageAmount(2);
|
edgeImitator.expectMessageAmount(2);
|
||||||
Dashboard dashboard = new Dashboard();
|
Dashboard dashboard = new Dashboard();
|
||||||
dashboard.setTitle("Edge Test Dashboard");
|
dashboard.setTitle(DASHBOARD_TITLE);
|
||||||
dashboard.setMobileHide(true);
|
dashboard.setMobileHide(true);
|
||||||
dashboard.setImage(IMAGE);
|
dashboard.setImage(IMAGE);
|
||||||
dashboard.setMobileOrder(MOBILE_ORDER);
|
dashboard.setMobileOrder(MOBILE_ORDER);
|
||||||
@ -200,12 +202,27 @@ public class DashboardEdgeTest extends AbstractEdgeTest {
|
|||||||
|
|
||||||
Dashboard foundDashboard = doGet("/api/dashboard/" + dashboard.getUuidId(), Dashboard.class);
|
Dashboard foundDashboard = doGet("/api/dashboard/" + dashboard.getUuidId(), Dashboard.class);
|
||||||
Assert.assertNotNull(foundDashboard);
|
Assert.assertNotNull(foundDashboard);
|
||||||
Assert.assertEquals("Edge Test Dashboard", foundDashboard.getName());
|
Assert.assertEquals(DASHBOARD_TITLE, foundDashboard.getName());
|
||||||
|
|
||||||
PageData<DashboardInfo> pageData = doGetTypedWithPageLink("/api/customer/" + savedCustomer.getId().toString() + "/dashboards?",
|
PageData<DashboardInfo> pageData = doGetTypedWithPageLink("/api/customer/" + savedCustomer.getId().toString() + "/dashboards?",
|
||||||
new TypeReference<>() {}, new PageLink(100));
|
new TypeReference<>() {}, new PageLink(100));
|
||||||
Assert.assertEquals(1, pageData.getData().size());
|
Assert.assertEquals(1, pageData.getData().size());
|
||||||
Assert.assertEquals("Edge Test Dashboard", pageData.getData().get(0).getTitle());
|
Assert.assertEquals(DASHBOARD_TITLE, pageData.getData().get(0).getTitle());
|
||||||
|
|
||||||
|
dashboard.setTitle(DASHBOARD_TITLE + " Updated");
|
||||||
|
dashboard.setAssignedCustomers(null);
|
||||||
|
dashboardUpdateMsgBuilder.setEntity(JacksonUtil.toString(dashboard));
|
||||||
|
dashboardUpdateMsgBuilder.setMsgType(UpdateMsgType.ENTITY_UPDATED_RPC_MESSAGE);
|
||||||
|
uplinkMsgBuilder = UplinkMsg.newBuilder();
|
||||||
|
uplinkMsgBuilder.addDashboardUpdateMsg(dashboardUpdateMsgBuilder.build());
|
||||||
|
|
||||||
|
edgeImitator.expectResponsesAmount(1);
|
||||||
|
edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
|
||||||
|
|
||||||
|
Assert.assertTrue(edgeImitator.waitForResponses());
|
||||||
|
|
||||||
|
foundDashboard = doGet("/api/dashboard/" + dashboard.getUuidId(), Dashboard.class);
|
||||||
|
Assert.assertEquals(DASHBOARD_TITLE + " Updated", foundDashboard.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -256,7 +273,7 @@ public class DashboardEdgeTest extends AbstractEdgeTest {
|
|||||||
Dashboard dashboard = new Dashboard();
|
Dashboard dashboard = new Dashboard();
|
||||||
dashboard.setId(new DashboardId(UUID.randomUUID()));
|
dashboard.setId(new DashboardId(UUID.randomUUID()));
|
||||||
dashboard.setTenantId(tenantId);
|
dashboard.setTenantId(tenantId);
|
||||||
dashboard.setTitle("Edge Test Dashboard");
|
dashboard.setTitle(DASHBOARD_TITLE);
|
||||||
dashboard.setAssignedCustomers(Sets.newHashSet(new ShortCustomerInfo(savedCustomer.getId(), savedCustomer.getTitle(), savedCustomer.isPublic())));
|
dashboard.setAssignedCustomers(Sets.newHashSet(new ShortCustomerInfo(savedCustomer.getId(), savedCustomer.getTitle(), savedCustomer.isPublic())));
|
||||||
return dashboard;
|
return dashboard;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -472,7 +472,7 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi
|
|||||||
TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToEdgeEventNotificationMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder();
|
TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToEdgeEventNotificationMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder();
|
||||||
consumerBuilder.settings(kafkaSettings);
|
consumerBuilder.settings(kafkaSettings);
|
||||||
consumerBuilder.topic(topicService.buildTopicName("tb_edge_event.notifications." + tenantId + "." + edgeId));
|
consumerBuilder.topic(topicService.buildTopicName("tb_edge_event.notifications." + tenantId + "." + edgeId));
|
||||||
consumerBuilder.clientId("monolith-to-edge-event-consumer" + serviceInfoProvider.getServiceId());
|
consumerBuilder.clientId("monolith-to-edge-event-consumer-" + serviceInfoProvider.getServiceId() + "-" + consumerCount.incrementAndGet());
|
||||||
consumerBuilder.groupId(topicService.buildTopicName("monolith-edge-event-consumer"));
|
consumerBuilder.groupId(topicService.buildTopicName("monolith-edge-event-consumer"));
|
||||||
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeEventNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeEventNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
|
||||||
consumerBuilder.admin(edgeEventAdmin);
|
consumerBuilder.admin(edgeEventAdmin);
|
||||||
|
|||||||
@ -421,7 +421,7 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory {
|
|||||||
TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToEdgeEventNotificationMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder();
|
TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToEdgeEventNotificationMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder();
|
||||||
consumerBuilder.settings(kafkaSettings);
|
consumerBuilder.settings(kafkaSettings);
|
||||||
consumerBuilder.topic(topicService.buildTopicName("tb_edge_event.notifications." + tenantId + "." + edgeId));
|
consumerBuilder.topic(topicService.buildTopicName("tb_edge_event.notifications." + tenantId + "." + edgeId));
|
||||||
consumerBuilder.clientId("tb-core-edge-event-consumer" + serviceInfoProvider.getServiceId());
|
consumerBuilder.clientId("tb-core-edge-event-consumer-" + serviceInfoProvider.getServiceId() + "-" + consumerCount.incrementAndGet());
|
||||||
consumerBuilder.groupId(topicService.buildTopicName("tb-core-edge-event-consumer"));
|
consumerBuilder.groupId(topicService.buildTopicName("tb-core-edge-event-consumer"));
|
||||||
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeEventNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
|
consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeEventNotificationMsg.parseFrom(msg.getData()), msg.getHeaders()));
|
||||||
consumerBuilder.admin(edgeEventAdmin);
|
consumerBuilder.admin(edgeEventAdmin);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user