From a498422985caf47c8056832e6ed8557cbac2dee1 Mon Sep 17 00:00:00 2001 From: Chris Hung Date: Wed, 24 Aug 2022 16:37:18 +0800 Subject: [PATCH] feat(command): update core-command to support message bus access Signed-off-by: Chris Hung --- Makefile | 2 +- cmd/core-command/res/configuration.toml | 52 +++++++++++++++++++++++++ go.mod | 14 +++---- go.sum | 25 +++++++----- internal/core/command/config/config.go | 32 ++++++++++----- internal/core/command/main.go | 33 +++++++++++++--- 6 files changed, 124 insertions(+), 34 deletions(-) diff --git a/Makefile b/Makefile index 53aac214b1..f2eebc5c38 100644 --- a/Makefile +++ b/Makefile @@ -102,7 +102,7 @@ cmd/core-data/core-data: command: cmd/core-command/core-command cmd/core-command/core-command: - $(GO) build -tags "$(NO_MESSAGEBUS_GO_BUILD_TAG) $(NON_DELAYED_START_GO_BUILD_TAG_FOR_CORE)" $(GOFLAGS) -o $@ ./cmd/core-command + $(GO) build -tags "$(NO_ZMQ_GO_BUILD_TAG) $(NON_DELAYED_START_GO_BUILD_TAG_FOR_CORE)" $(GOFLAGS) -o $@ ./cmd/core-command notifications: cmd/support-notifications/support-notifications cmd/support-notifications/support-notifications: diff --git a/cmd/core-command/res/configuration.toml b/cmd/core-command/res/configuration.toml index 3e4dcbe97d..64442a95d6 100644 --- a/cmd/core-command/res/configuration.toml +++ b/cmd/core-command/res/configuration.toml @@ -6,6 +6,14 @@ LogLevel = "INFO" [Writable.InsecureSecrets.DB.Secrets] username = "" password = "" + [Writable.InsecureSecrets.mqtt] + path = "mqtt" + [Writable.InsecureSecrets.mqtt.Secrets] + username = "" + password = "" + cacert = "" + clientcert = "" + clientkey = "" [Service] HealthCheckInterval = "10s" @@ -36,6 +44,50 @@ Type = "consul" Host = "localhost" Port = 59881 +[MessageQueue] + Required = false + [MessageQueue.Internal] + Type = "redis" + Protocol = "redis" + Host = "localhost" + Port = 6379 + AuthMode = "usernamepassword" # required for redis messagebus (secure or insecure). + SecretName = "redisdb" + [MessageQueue.Internal.Topics] + RequestTopicPrefix = "edgex/command/request/" # for publishing requests to the device service; /// will be added to this publish topic prefix + ResponseTopic = "edgex/command/response/#" # for subscribing to device service responses + InternalRequestCommandTopic = "/command/request/#" # for subscribing to internal command requests + InternalResponseCommandTopicPrefix = "/command/response/" # for publishing responses back to internal service /// will be added to this publish topic prefix + InternalRequestQueryTopic = "/commandquery/request" # for subscribing to internal command query requests + InternalResponseQueryTopic = "/commandquery/response" # for publishing reponsses back to internal service + [MessageQueue.Internal.Optional] + # Client Identifiers + ClientId ="core-command" + # Connection information + Qos = "0" # Quality of Sevice values are 0 (At most once), 1 (At least once) or 2 (Exactly once) + KeepAlive = "10" # Seconds (must be 2 or greater) + Retained = "false" + AutoReconnect = "true" + ConnectTimeout = "5" # Seconds + # TLS configuration - Only used if Cert/Key file or Cert/Key PEMblock are specified + SkipCertVerify = "false" + [MessageQueue.External] + Url = "tcp://localhost:1883" + ClientId = "core-command" + ConnectTimeout = "5s" + AutoReconnect = true + KeepAlive = 10 + QoS = 0 + Retain = true + SkipCertVerify = false + SecretPath = "mqtt" + AuthMode = "none" + [MessageQueue.External.Topics] + RequestCommandTopic = "edgex/command/request/#" # for subscribing to 3rd party command requests + ResponseCommandTopicPrefix = "edgex/command/response/" # for publishing responses back to 3rd party systems /// will be added to this publish topic prefix + RequestQueryTopic = "edgex/commandquery/request" # for subscribing to 3rd party command query request + ResponseQueryTopic = "edgex/commandquery/response" # for publishing responses back to 3rd party systems + [SecretStore] Type = "vault" Protocol = "http" diff --git a/go.mod b/go.mod index a066bdb89e..370fd11715 100644 --- a/go.mod +++ b/go.mod @@ -2,11 +2,12 @@ module github.com/edgexfoundry/edgex-go require ( bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 - github.com/edgexfoundry/go-mod-bootstrap/v2 v2.3.0-dev.12 + github.com/eclipse/paho.mqtt.golang v1.4.1 + github.com/edgexfoundry/go-mod-bootstrap/v2 v2.3.0-dev.14 github.com/edgexfoundry/go-mod-core-contracts/v2 v2.3.0-dev.15 github.com/edgexfoundry/go-mod-messaging/v2 v2.3.0-dev.13 github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 - github.com/edgexfoundry/go-mod-secrets/v2 v2.3.0-dev.5 + github.com/edgexfoundry/go-mod-secrets/v2 v2.3.0-dev.6 github.com/fxamacker/cbor/v2 v2.4.0 github.com/golang-jwt/jwt/v4 v4.4.2 github.com/gomodule/redigo v1.8.9 @@ -27,7 +28,6 @@ require ( github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/eclipse/paho.mqtt.golang v1.4.1 // indirect github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 // indirect github.com/fatih/color v1.9.0 // indirect github.com/go-kit/log v0.2.1 // indirect @@ -49,13 +49,13 @@ require ( github.com/hashicorp/serf v0.9.5 // indirect github.com/klauspost/compress v1.15.9 // indirect github.com/leodido/go-urn v1.2.1 // indirect - github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-isatty v0.0.12 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/consulstructure v0.0.0-20190329231841-56fdc4d2da54 // indirect github.com/mitchellh/copystructure v1.0.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.1.2 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.0 // indirect github.com/nats-io/jwt/v2 v2.3.0 // indirect github.com/nats-io/nats.go v1.16.0 // indirect @@ -68,7 +68,7 @@ require ( github.com/zeebo/errs v1.2.2 // indirect golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 // indirect golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect - golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect + golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa // indirect diff --git a/go.sum b/go.sum index c8964e4c1e..721c099ac1 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/eclipse/paho.mqtt.golang v1.4.1 h1:tUSpviiL5G3P9SZZJPC4ZULZJsxQKXxfENpMvdbAXAI= github.com/eclipse/paho.mqtt.golang v1.4.1/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.3.0-dev.12 h1:bVTjv56lGmMpr6eECOApNODGakybNlREv3oxFK+grN8= -github.com/edgexfoundry/go-mod-bootstrap/v2 v2.3.0-dev.12/go.mod h1:h+vCqw+fw9GN+c/ZMDKW6Ik08uL/4mMJjqVIGepmoSU= +github.com/edgexfoundry/go-mod-bootstrap/v2 v2.3.0-dev.14 h1:Y1WI9T6+bHS6h0broWKF+7WPO4gmzEqYWJhmJ8YSfBo= +github.com/edgexfoundry/go-mod-bootstrap/v2 v2.3.0-dev.14/go.mod h1:nB/4/aGE2e/ed49hBEyDsWe2IaJwIJ/UR15P6cBmRVM= github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0 h1:AZeaAPJM5X93ITFgwbwluYDtYEJ7tkCMSlj35GwfLLU= github.com/edgexfoundry/go-mod-configuration/v2 v2.2.0/go.mod h1:YP17JhMnXTitowXE13QJwFaKo0oc03iyoKLjWAYl4FE= github.com/edgexfoundry/go-mod-core-contracts/v2 v2.3.0-dev.15 h1:nDEOf1TXpnU0fx/aKWnJE8z49OQ2AzjnOdMaoZRLzh4= @@ -42,8 +42,8 @@ github.com/edgexfoundry/go-mod-messaging/v2 v2.3.0-dev.13 h1:Z7bpS0HK9fdKdAb4r26 github.com/edgexfoundry/go-mod-messaging/v2 v2.3.0-dev.13/go.mod h1:yLJ9EK4Feg409FDr0oP87LbaRLyOSGJk/ikaIfEDKcI= github.com/edgexfoundry/go-mod-registry/v2 v2.2.0 h1:dk9ul1t7INAiyZXeu/GrpinFE3qOekdy8uZOqEGgIiE= github.com/edgexfoundry/go-mod-registry/v2 v2.2.0/go.mod h1:DUQRnAd5fVzoROc5SI+PTFUD/vCNeZmZHBMrLElbmwI= -github.com/edgexfoundry/go-mod-secrets/v2 v2.3.0-dev.5 h1:wksbHWGDllkrkjoeRTrhcQcPaP5iiub/i2EuwHyPmEo= -github.com/edgexfoundry/go-mod-secrets/v2 v2.3.0-dev.5/go.mod h1:h/FohFNY8xHalioLg1bhjAuEj0z+danSDtixirvaXmQ= +github.com/edgexfoundry/go-mod-secrets/v2 v2.3.0-dev.6 h1:YxQ1riMO6I1USdods0bV3rcUKj/Zkf9WChpg6MOrSyk= +github.com/edgexfoundry/go-mod-secrets/v2 v2.3.0-dev.6/go.mod h1:h/FohFNY8xHalioLg1bhjAuEj0z+danSDtixirvaXmQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -163,14 +163,16 @@ github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= @@ -186,8 +188,9 @@ github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/nats-io/jwt/v2 v2.3.0 h1:z2mA1a7tIf5ShggOFlR1oBPgd6hGqcDYsISxZByUzdI= @@ -309,9 +312,11 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -385,8 +390,8 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/core/command/config/config.go b/internal/core/command/config/config.go index a732951b7f..76a180e6fb 100644 --- a/internal/core/command/config/config.go +++ b/internal/core/command/config/config.go @@ -1,5 +1,6 @@ /******************************************************************************* * Copyright 2018 Dell Inc. + * Copyright 2022 IOTech Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at @@ -20,12 +21,13 @@ import ( // ConfigurationStruct contains the configuration properties for the core-command service. type ConfigurationStruct struct { - Writable WritableInfo - Clients map[string]bootstrapConfig.ClientInfo - Databases map[string]bootstrapConfig.Database - Registry bootstrapConfig.RegistryInfo - Service bootstrapConfig.ServiceInfo - SecretStore bootstrapConfig.SecretStoreInfo + Writable WritableInfo + Clients map[string]bootstrapConfig.ClientInfo + Databases map[string]bootstrapConfig.Database + Registry bootstrapConfig.RegistryInfo + Service bootstrapConfig.ServiceInfo + MessageQueue MessageQueue + SecretStore bootstrapConfig.SecretStoreInfo } // WritableInfo contains configuration properties that can be updated and applied without restarting the service. @@ -34,6 +36,14 @@ type WritableInfo struct { InsecureSecrets bootstrapConfig.InsecureSecrets } +type MessageQueue struct { + // This is required for backwards compatability with older versions of 2.x configuration + // TODO: remove 'Required' in EdgeX 3.0 + Required bool + Internal bootstrapConfig.MessageBusInfo + External bootstrapConfig.ExternalMQTTInfo +} + // UpdateFromRaw converts configuration received from the registry to a service-specific configuration struct which is // then used to overwrite the service's existing configuration struct. func (c *ConfigurationStruct) UpdateFromRaw(rawConfig interface{}) bool { @@ -70,10 +80,12 @@ func (c *ConfigurationStruct) UpdateWritableFromRaw(rawWritable interface{}) boo // into an bootstrapConfig.BootstrapConfiguration struct contained within ConfigurationStruct). func (c *ConfigurationStruct) GetBootstrap() bootstrapConfig.BootstrapConfiguration { return bootstrapConfig.BootstrapConfiguration{ - Clients: c.Clients, - Service: c.Service, - Registry: c.Registry, - SecretStore: c.SecretStore, + Clients: c.Clients, + Service: c.Service, + Registry: c.Registry, + SecretStore: c.SecretStore, + MessageQueue: c.MessageQueue.Internal, + ExternalMQTT: c.MessageQueue.External, } } diff --git a/internal/core/command/main.go b/internal/core/command/main.go index 9840e6fc20..a725e6b78f 100644 --- a/internal/core/command/main.go +++ b/internal/core/command/main.go @@ -1,5 +1,6 @@ /******************************************************************************* * Copyright 2020 Dell Inc. + * Copyright 2022 IOTech Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at @@ -17,12 +18,7 @@ package command import ( "context" "os" - - "github.com/edgexfoundry/edgex-go" - "github.com/edgexfoundry/edgex-go/internal" - "github.com/edgexfoundry/edgex-go/internal/core/command/config" - "github.com/edgexfoundry/edgex-go/internal/core/command/container" - "github.com/edgexfoundry/edgex-go/internal/pkg/telemetry" + "sync" "github.com/edgexfoundry/go-mod-bootstrap/v2/bootstrap" "github.com/edgexfoundry/go-mod-bootstrap/v2/bootstrap/flags" @@ -31,6 +27,12 @@ import ( "github.com/edgexfoundry/go-mod-bootstrap/v2/bootstrap/startup" "github.com/edgexfoundry/go-mod-bootstrap/v2/di" + "github.com/edgexfoundry/edgex-go" + "github.com/edgexfoundry/edgex-go/internal" + "github.com/edgexfoundry/edgex-go/internal/core/command/config" + "github.com/edgexfoundry/edgex-go/internal/core/command/container" + "github.com/edgexfoundry/edgex-go/internal/pkg/telemetry" + "github.com/edgexfoundry/go-mod-core-contracts/v2/common" "github.com/gorilla/mux" @@ -70,6 +72,7 @@ func Main(ctx context.Context, cancel context.CancelFunc, router *mux.Router) { true, []interfaces.BootstrapHandler{ handlers.NewClientsBootstrap().BootstrapHandler, + MessageBusBootstrapHandler, NewBootstrap(router, common.CoreCommandServiceKey).BootstrapHandler, telemetry.BootstrapHandler, httpServer.BootstrapHandler, @@ -78,3 +81,21 @@ func Main(ctx context.Context, cancel context.CancelFunc, router *mux.Router) { // code here! } + +// MessageBusBootstrapHandler sets up the MessageBus connection if MessageBus required is true. +// This is required for backwards compatability with older versions of 2.x configuration +// TODO: Remove in EdgeX 3.0 +func MessageBusBootstrapHandler(ctx context.Context, wg *sync.WaitGroup, startupTimer startup.Timer, dic *di.Container) bool { + configuration := container.ConfigurationFrom(dic.Get) + if configuration.MessageQueue.Required { + if !handlers.MessagingBootstrapHandler(ctx, wg, startupTimer, dic) { + return false + } + if !handlers.NewExternalMQTT(nil).BootstrapHandler(ctx, wg, startupTimer, dic) { + return false + } + } + + // Not required so do nothing + return true +}