우리는 eventhub가 다른 임차인들과 공유되는 멀티 테넌트 (multi-tenant) 애플리케이션을 개발 중입니다. 우리는 세입자들에게 분할을 배포 할 것입니다. 모든 임차인은 다른 파티션에 메시지를 보냅니다. 우리는 파티션 레벨에서 세입자를 인증하려고합니다. Microsoft 사이트에서 설명한 것처럼 세입자 ID를 기준으로 파티션 키를 정의했습니다. 그러나 문제는 하나 이상의 파티션 키가 같은 파티션에 메시지를 보내는 것입니다. 어떤 경우에는 안된다. 이상적으로 모든 파티션 키는 다른 파티션에 매핑되어야합니다.Azure eventhub 동일한 파티션에 여러 파티션 키 포인트
var serviceNamespace = "namespace name here";
var hubName = "hub name here";
var deviceName = "device name here";
var sasToken = "SAS TOKEN HERE";
Mymessage subGroup1 = CreateMessage();
var factory = MessagingFactory.Create(ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, ""), new MessagingFactorySettings
{
TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(sasToken),
TransportType = TransportType.Amqp
});
var client = factory.CreateEventHubClient(String.Format("{0}/publishers/{1}", hubName, deviceName));
var data = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(subGroup1)));
data.PartitionKey = "jeep";
client.Send(data);
내 접근 방식에있어 잘못된 점을 이해해주세요.
이벤트 허브는 동일한 네임 스페이스가 처리량 단위를 공유합니다. 그러나 다른 이벤트 허브의 문제는 우리가 소비자 역할을 공유 할 수 없다는 것입니다. 우리 세입자 중 일부는 매우 느린 속도로 데이터를 전송할 것입니다. 그들에 대한 소비자 역할이 다르다는 것은 말이되지 않습니다. 그런 다음 고 가용성을 달성하기 위해 소비자 (작업자 역할 시스템)의 두 인스턴스를 만들어야합니다. 우리는 SaaS 애플리케이션을 만들고 싶습니다. 리소스를 세입자가 공유하여 비용을 줄이는 것이 좋습니다. – Pragmatic
그 경우 나는 귀하의 선택이 마지막 문장에있는 것이라고 믿습니다. 그것은 PartitionKey를 사용하여 다른 클라이언트의 데이터를 분리합니다. 당신은 여전히 확장 성 모자를 쥐고있다. – cacsar
리버스 엔지니어링을 수행 할 수 없습니다. 어떤 문자열이 partition1에 매핑되는지 확인한 다음 parition2를 확인하는 등의 작업을 할 수 있습니다.그런 다음이 문자열을 사용하여 SAS 키를 생성 할 수 있습니다. 우리는 이러한 문자열을 우리의 거주자들에게 배포 할 수 있습니다. 이렇게하면 'xxxx'문자열이 'partition_x'에 매핑되고 'sas_key_x'는 partition_x에 데이터를 전달하는 데에만 사용될 수 있습니다. 나는 이것이 깨끗하지는 않지만 목적을 달성 할 수 있다는 것을 알고있다. – Pragmatic