我尝试遵循以下文档:在启用异地灾难恢复时将事件从主集线器复制到辅助集线器。 我有一个别名,EVH-Primary 和 EVH-Secondary 都位于它后面。 EVH-Primary 处于活动状态; EVH-辅助是被动的。
我尝试通过侦听“复制”使用者组的 Azure 函数发送相同的事件来复制通过 EVH-Primary 的任何事件,除了将事件转发到 EVH-Secondary 之外不执行任何操作;但是,当我尝试这样做时,出现以下错误:
InvalidSignature:此命名空间是辅助且只读的。
如果辅助集线器始终是只读的,那么尝试将事件复制到它有什么意义呢? 难道是我的代码有问题?
这是我的 C#:
[Function(nameof(EventReplicationFunction))]
public async Task EventReplication([EventHubTrigger("%EventHubs:HubName%", Connection = "EventHubs", ConsumerGroup = "%EventHubsDR:ConsumerGroupReplication%")]
EventData[] eventDataCollection,
FunctionContext context)
{
try
{
if (!IsDrConfigured(logger) || !await IsSecondaryAsync()) return;
logger.LogInformation("{Method} - Received {EventBatchCount} events to replicate", nameof(EventReplicationFunction), eventDataCollection.Length);
var tasks = eventDataCollection.Select(async evt =>
{
evt.Properties["IsReplication"] = 1;
var evhProducerClient = eventBufferClientFactory.CreateClient("Secondary");
await evhProducerClient.EnqueueEventAsync(evt, context.CancellationToken);
});
await Task.WhenAll(tasks);
}
catch (OperationCanceledException)
{
if (context.CancellationToken.IsCancellationRequested)
{
logger.LogWarning("{Method} WARNING: Operation Canceled due to external cancellation request", nameof(EventReplicationFunction));
}
else
{
logger.LogWarning("{Method} WARNING: Operation Canceled", nameof(EventReplicationFunction));
}
}
catch (Exception ex)
{
logger.LogError(ex, LogTemplateType.Error.ExceptionWithStrackTrace, nameof(EventReplicationFunction), ex.Message, ex.StackTrace);
}
}
InvalidSignature:此命名空间是辅助且只读的。
您收到此错误是因为您配置了 Azure 事件中心 - 异地灾难恢复,它不复制事件数据,而仅将命名空间配置信息从主命名空间复制到辅助命名空间。
您也可以参考下面这个SO中MayankBargali给出的答案。
事件中心地理灾难仅适用于元数据灾难恢复,不适用于事件中心灾难恢复中的事件。地理灾难主要用于以下场景:您不想在发生灾难时更新不同应用程序中的连接字符串,并且可以节省使用所有事件中心/配置创建新命名空间并更新新连接字符串的时间。
参考文献 -