Merge pull request #2298 from mecoding1/master
Receiving of custom properties from IoT Hub through endpoint that is compatible with Event Hubs
This commit is contained in:
commit
5043b7cb4a
|
|
@ -73,6 +73,9 @@ const (
|
|||
sysPropIotHubEnqueuedTime = "iothub-enqueuedtime"
|
||||
sysPropMessageID = "message-id"
|
||||
|
||||
// Metadata field to ensure all Event Hub properties pass through
|
||||
requireAllProperties = "requireAllProperties"
|
||||
|
||||
defaultMessageRetentionInDays = 1
|
||||
defaultPartitionCount = 1
|
||||
|
||||
|
|
@ -86,7 +89,7 @@ const (
|
|||
maxPartitionCount = int32(1024)
|
||||
)
|
||||
|
||||
func subscribeHandler(ctx context.Context, topic string, e *eventhub.Event, handler pubsub.Handler) error {
|
||||
func subscribeHandler(ctx context.Context, topic string, getAllProperties bool, e *eventhub.Event, handler pubsub.Handler) error {
|
||||
res := pubsub.NewMessage{Data: e.Data, Topic: topic, Metadata: map[string]string{}}
|
||||
if e.SystemProperties.SequenceNumber != nil {
|
||||
res.Metadata[sysPropSequenceNumber] = strconv.FormatInt(*e.SystemProperties.SequenceNumber, 10)
|
||||
|
|
@ -124,6 +127,16 @@ func subscribeHandler(ctx context.Context, topic string, e *eventhub.Event, hand
|
|||
if e.ID != "" {
|
||||
res.Metadata[sysPropMessageID] = e.ID
|
||||
}
|
||||
// added properties if any ( includes application properties from iot-hub)
|
||||
if getAllProperties {
|
||||
if e.Properties != nil && len(e.Properties) > 0 {
|
||||
for key, value := range e.Properties {
|
||||
if str, ok := value.(string); ok {
|
||||
res.Metadata[key] = str
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return handler(ctx, &res)
|
||||
}
|
||||
|
|
@ -622,6 +635,14 @@ func (aeh *AzureEventHubs) Subscribe(subscribeCtx context.Context, req pubsub.Su
|
|||
return err
|
||||
}
|
||||
|
||||
getAllProperties := false
|
||||
if req.Metadata[requireAllProperties] != "" {
|
||||
getAllProperties, err = strconv.ParseBool(req.Metadata[requireAllProperties])
|
||||
if err != nil {
|
||||
aeh.logger.Errorf("invalid value for metadata : %s . Error: %v.", requireAllProperties, err)
|
||||
}
|
||||
}
|
||||
|
||||
aeh.logger.Debugf("registering handler for topic %s", req.Topic)
|
||||
_, err = processor.RegisterHandler(subscribeCtx,
|
||||
func(_ context.Context, e *eventhub.Event) error {
|
||||
|
|
@ -631,7 +652,7 @@ func (aeh *AzureEventHubs) Subscribe(subscribeCtx context.Context, req pubsub.Su
|
|||
retryerr := retry.NotifyRecover(func() error {
|
||||
aeh.logger.Debugf("Processing EventHubs event %s/%s", req.Topic, e.ID)
|
||||
|
||||
return subscribeHandler(subscribeCtx, req.Topic, e, handler)
|
||||
return subscribeHandler(subscribeCtx, req.Topic, getAllProperties, e, handler)
|
||||
}, b, func(_ error, _ time.Duration) {
|
||||
aeh.logger.Warnf("Error processing EventHubs event: %s/%s. Retrying...", req.Topic, e.ID)
|
||||
}, func() {
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ const (
|
|||
|
||||
testStorageContainerName = "iothub-pubsub-integration-test"
|
||||
testTopic = "integration-test-topic"
|
||||
applicationProperty = "applicationProperty"
|
||||
)
|
||||
|
||||
func createIotHubPubsubMetadata() pubsub.Metadata {
|
||||
|
|
@ -86,8 +87,10 @@ func testReadIotHubEvents(t *testing.T) {
|
|||
}
|
||||
|
||||
req := pubsub.SubscribeRequest{
|
||||
Topic: testTopic, // TODO: Handle Topic configuration after EventHubs pubsub rewrite #951
|
||||
Metadata: map[string]string{},
|
||||
Topic: testTopic, // TODO: Handle Topic configuration after EventHubs pubsub rewrite #951
|
||||
Metadata: map[string]string{
|
||||
"requireAllProperties": "true",
|
||||
},
|
||||
}
|
||||
err = eh.Subscribe(context.Background(), req, handler)
|
||||
assert.Nil(t, err)
|
||||
|
|
@ -114,6 +117,9 @@ func testReadIotHubEvents(t *testing.T) {
|
|||
assert.Contains(t, r.Metadata, sysPropIotHubConnectionAuthMethod, "IoT device event missing: %s", sysPropIotHubConnectionAuthMethod)
|
||||
assert.Contains(t, r.Metadata, sysPropIotHubEnqueuedTime, "IoT device event missing: %s", sysPropIotHubEnqueuedTime)
|
||||
assert.Contains(t, r.Metadata, sysPropMessageID, "IoT device event missing: %s", sysPropMessageID)
|
||||
|
||||
// Verify sent custom application property is received in IoT Hub device event metadata
|
||||
assert.Contains(t, r.Metadata, applicationProperty, "IoT device event missing: %s", applicationProperty)
|
||||
}
|
||||
|
||||
eh.Close()
|
||||
|
|
|
|||
|
|
@ -41,4 +41,4 @@ fi
|
|||
|
||||
# Send the test IoT device messages to the IoT Hub.`testmessageForEventHubCertificationTest` is being asserted in the certification test
|
||||
# TODO : read messageCount and data as an argument
|
||||
az iot device simulate -n ${AzureIotHubName} -d ${IOT_HUB_TEST_DEVICE_NAME} --data 'testmessageForEventHubCertificationTest' --msg-count 10 --msg-interval 1 --protocol http --properties "iothub-userid=dapr-user-id;iothub-messageid=dapr-message-id"
|
||||
az iot device simulate -n ${AzureIotHubName} -d ${IOT_HUB_TEST_DEVICE_NAME} --data 'testmessageForEventHubCertificationTest' --msg-count 10 --msg-interval 1 --protocol http --properties "iothub-userid=dapr-user-id;iothub-messageid=dapr-message-id;applicationProperty=custom-value"
|
||||
|
|
|
|||
|
|
@ -38,4 +38,4 @@ if [[ -z "$(az iot hub device-identity show -n ${IOT_HUB_NAME} -d ${IOT_HUB_TEST
|
|||
fi
|
||||
|
||||
# Send the test IoT device messages to the IoT Hub
|
||||
az iot device simulate -n ${IOT_HUB_NAME} -d ${IOT_HUB_TEST_DEVICE_NAME} --data '{ "data": "Integration test message" }' --msg-count 2 --msg-interval 1 --protocol http --properties "iothub-userid=dapr-user-id;iothub-messageid=dapr-message-id"
|
||||
az iot device simulate -n ${IOT_HUB_NAME} -d ${IOT_HUB_TEST_DEVICE_NAME} --data '{ "data": "Integration test message" }' --msg-count 2 --msg-interval 1 --protocol http --properties "iothub-userid=dapr-user-id;iothub-messageid=dapr-message-id;applicationProperty=custom-value"
|
||||
|
|
|
|||
Loading…
Reference in New Issue