Support message-id in Event Hubs components
This commit is contained in:
parent
72754c6036
commit
2006bcccb0
|
@ -57,6 +57,7 @@ const (
|
||||||
sysPropIotHubConnectionAuthMethod = "iothub-connection-auth-method"
|
sysPropIotHubConnectionAuthMethod = "iothub-connection-auth-method"
|
||||||
sysPropIotHubConnectionModuleID = "iothub-connection-module-id"
|
sysPropIotHubConnectionModuleID = "iothub-connection-module-id"
|
||||||
sysPropIotHubEnqueuedTime = "iothub-enqueuedtime"
|
sysPropIotHubEnqueuedTime = "iothub-enqueuedtime"
|
||||||
|
sysPropMessageID = "message-id"
|
||||||
)
|
)
|
||||||
|
|
||||||
func readHandler(e *eventhub.Event, handler func(*bindings.ReadResponse) ([]byte, error)) error {
|
func readHandler(e *eventhub.Event, handler func(*bindings.ReadResponse) ([]byte, error)) error {
|
||||||
|
@ -74,7 +75,7 @@ func readHandler(e *eventhub.Event, handler func(*bindings.ReadResponse) ([]byte
|
||||||
if e.SystemProperties.PartitionID != nil {
|
if e.SystemProperties.PartitionID != nil {
|
||||||
res.Metadata[sysPropPartitionID] = strconv.Itoa(int(*e.SystemProperties.PartitionID))
|
res.Metadata[sysPropPartitionID] = strconv.Itoa(int(*e.SystemProperties.PartitionID))
|
||||||
}
|
}
|
||||||
// The following metadata properties are only present if event was generated by Azure IoT Hub
|
// The following metadata properties are only present if event was generated by Azure IoT Hub.
|
||||||
if e.SystemProperties.PartitionKey != nil {
|
if e.SystemProperties.PartitionKey != nil {
|
||||||
res.Metadata[sysPropPartitionKey] = *e.SystemProperties.PartitionKey
|
res.Metadata[sysPropPartitionKey] = *e.SystemProperties.PartitionKey
|
||||||
}
|
}
|
||||||
|
@ -93,7 +94,10 @@ func readHandler(e *eventhub.Event, handler func(*bindings.ReadResponse) ([]byte
|
||||||
if e.SystemProperties.IoTHubEnqueuedTime != nil {
|
if e.SystemProperties.IoTHubEnqueuedTime != nil {
|
||||||
res.Metadata[sysPropIotHubEnqueuedTime] = e.SystemProperties.IoTHubEnqueuedTime.Format(time.RFC3339)
|
res.Metadata[sysPropIotHubEnqueuedTime] = e.SystemProperties.IoTHubEnqueuedTime.Format(time.RFC3339)
|
||||||
}
|
}
|
||||||
|
// azure-event-hubs-go SDK pulls out the AMQP message-id property to the Event.ID property, map it from there.
|
||||||
|
if e.ID != "" {
|
||||||
|
res.Metadata[sysPropMessageID] = e.ID
|
||||||
|
}
|
||||||
_, err := handler(&res)
|
_, err := handler(&res)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -81,6 +81,7 @@ func testReadIotHubEvents(t *testing.T) {
|
||||||
assert.Greater(t, len(readResponses), 0, "Failed to receive any IotHub events")
|
assert.Greater(t, len(readResponses), 0, "Failed to receive any IotHub events")
|
||||||
logger.Infof("Received %d messages", len(readResponses))
|
logger.Infof("Received %d messages", len(readResponses))
|
||||||
for _, r := range readResponses {
|
for _, r := range readResponses {
|
||||||
|
logger.Infof("Message metadata: %v", r.Metadata)
|
||||||
assert.Contains(t, string(r.Data), "Integration test message")
|
assert.Contains(t, string(r.Data), "Integration test message")
|
||||||
|
|
||||||
// Verify expected IoT Hub device event metadata exists
|
// Verify expected IoT Hub device event metadata exists
|
||||||
|
@ -92,6 +93,7 @@ func testReadIotHubEvents(t *testing.T) {
|
||||||
assert.Contains(t, r.Metadata, sysPropIotHubAuthGenerationID, "IoT device event missing: %s", sysPropIotHubAuthGenerationID)
|
assert.Contains(t, r.Metadata, sysPropIotHubAuthGenerationID, "IoT device event missing: %s", sysPropIotHubAuthGenerationID)
|
||||||
assert.Contains(t, r.Metadata, sysPropIotHubConnectionAuthMethod, "IoT device event missing: %s", sysPropIotHubConnectionAuthMethod)
|
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, sysPropIotHubEnqueuedTime, "IoT device event missing: %s", sysPropIotHubEnqueuedTime)
|
||||||
|
assert.Contains(t, r.Metadata, sysPropMessageID, "IoT device event missing: %s", sysPropMessageID)
|
||||||
}
|
}
|
||||||
|
|
||||||
eh.Close()
|
eh.Close()
|
||||||
|
|
|
@ -51,6 +51,7 @@ const (
|
||||||
sysPropIotHubConnectionAuthMethod = "iothub-connection-auth-method"
|
sysPropIotHubConnectionAuthMethod = "iothub-connection-auth-method"
|
||||||
sysPropIotHubConnectionModuleID = "iothub-connection-module-id"
|
sysPropIotHubConnectionModuleID = "iothub-connection-module-id"
|
||||||
sysPropIotHubEnqueuedTime = "iothub-enqueuedtime"
|
sysPropIotHubEnqueuedTime = "iothub-enqueuedtime"
|
||||||
|
sysPropMessageID = "message-id"
|
||||||
)
|
)
|
||||||
|
|
||||||
func subscribeHandler(ctx context.Context, topic string, e *eventhub.Event, handler pubsub.Handler) error {
|
func subscribeHandler(ctx context.Context, topic string, e *eventhub.Event, handler pubsub.Handler) error {
|
||||||
|
@ -68,7 +69,7 @@ func subscribeHandler(ctx context.Context, topic string, e *eventhub.Event, hand
|
||||||
if e.SystemProperties.PartitionID != nil {
|
if e.SystemProperties.PartitionID != nil {
|
||||||
res.Metadata[sysPropPartitionID] = strconv.Itoa(int(*e.SystemProperties.PartitionID))
|
res.Metadata[sysPropPartitionID] = strconv.Itoa(int(*e.SystemProperties.PartitionID))
|
||||||
}
|
}
|
||||||
// The following metadata properties are only present if event was generated by Azure IoT Hub
|
// The following metadata properties are only present if event was generated by Azure IoT Hub.
|
||||||
if e.SystemProperties.PartitionKey != nil {
|
if e.SystemProperties.PartitionKey != nil {
|
||||||
res.Metadata[sysPropPartitionKey] = *e.SystemProperties.PartitionKey
|
res.Metadata[sysPropPartitionKey] = *e.SystemProperties.PartitionKey
|
||||||
}
|
}
|
||||||
|
@ -87,6 +88,10 @@ func subscribeHandler(ctx context.Context, topic string, e *eventhub.Event, hand
|
||||||
if e.SystemProperties.IoTHubEnqueuedTime != nil {
|
if e.SystemProperties.IoTHubEnqueuedTime != nil {
|
||||||
res.Metadata[sysPropIotHubEnqueuedTime] = e.SystemProperties.IoTHubEnqueuedTime.Format(time.RFC3339)
|
res.Metadata[sysPropIotHubEnqueuedTime] = e.SystemProperties.IoTHubEnqueuedTime.Format(time.RFC3339)
|
||||||
}
|
}
|
||||||
|
// azure-event-hubs-go SDK pulls out the AMQP message-id property to the Event.ID property, map it from there.
|
||||||
|
if e.ID != "" {
|
||||||
|
res.Metadata[sysPropMessageID] = e.ID
|
||||||
|
}
|
||||||
|
|
||||||
return handler(ctx, &res)
|
return handler(ctx, &res)
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,7 @@ func testReadIotHubEvents(t *testing.T) {
|
||||||
assert.Greater(t, len(messages), 0, "Failed to receive any IotHub events")
|
assert.Greater(t, len(messages), 0, "Failed to receive any IotHub events")
|
||||||
logger.Infof("Received %d messages", len(messages))
|
logger.Infof("Received %d messages", len(messages))
|
||||||
for _, r := range messages {
|
for _, r := range messages {
|
||||||
|
logger.Infof("Message metadata: %v", r.Metadata)
|
||||||
assert.Equal(t, r.Topic, testTopic, "Message topic doesn't match subscription")
|
assert.Equal(t, r.Topic, testTopic, "Message topic doesn't match subscription")
|
||||||
assert.Contains(t, string(r.Data), "Integration test message")
|
assert.Contains(t, string(r.Data), "Integration test message")
|
||||||
|
|
||||||
|
@ -100,6 +101,7 @@ func testReadIotHubEvents(t *testing.T) {
|
||||||
assert.Contains(t, r.Metadata, sysPropIotHubAuthGenerationID, "IoT device event missing: %s", sysPropIotHubAuthGenerationID)
|
assert.Contains(t, r.Metadata, sysPropIotHubAuthGenerationID, "IoT device event missing: %s", sysPropIotHubAuthGenerationID)
|
||||||
assert.Contains(t, r.Metadata, sysPropIotHubConnectionAuthMethod, "IoT device event missing: %s", sysPropIotHubConnectionAuthMethod)
|
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, sysPropIotHubEnqueuedTime, "IoT device event missing: %s", sysPropIotHubEnqueuedTime)
|
||||||
|
assert.Contains(t, r.Metadata, sysPropMessageID, "IoT device event missing: %s", sysPropMessageID)
|
||||||
}
|
}
|
||||||
|
|
||||||
eh.Close()
|
eh.Close()
|
||||||
|
|
|
@ -30,4 +30,4 @@ if [[ -z "$(az iot hub device-identity show -n ${IOT_HUB_NAME} -d ${IOT_HUB_TEST
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Send the test IoT device messages to the IoT Hub
|
# Send the test IoT device messages to the IoT Hub
|
||||||
az iot device send-d2c-message -n ${IOT_HUB_NAME} -d ${IOT_HUB_TEST_DEVICE_NAME} --data '{ "data": "Integration test message" }' --msg-count 2
|
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"
|
||||||
|
|
Loading…
Reference in New Issue