Azure帐户中的多个订阅流式传输到单个EventHub

Azure帐户中的多个订阅流式传输到单个EventHub,azure,azure-eventhub,azure-eventhub-capture,Azure,Azure Eventhub,Azure Eventhub Capture,我想将不同订阅的事件流式传输到azure上的单个eventhub。 目前,我已将eventhub配置为单个订阅,并且正在流式传输事件。我有一个java客户机,它使用这些事件并将其存储在我的持久层上。我的java客户端看起来像 private void processUsingProcessorClient(){ List<Disposable> subscriptions = null; try { EventHubConsu

我想将不同订阅的事件流式传输到azure上的单个eventhub。 目前,我已将eventhub配置为单个订阅,并且正在流式传输事件。我有一个java客户机,它使用这些事件并将其存储在我的持久层上。我的java客户端看起来像

private void processUsingProcessorClient(){
        List<Disposable> subscriptions = null;
        try {

            EventHubConsumerAsyncClient eventHubConsumerAsyncClient = new EventHubClientBuilder()
                    .consumerGroup(EventHubClientBuilder.DEFAULT_CONSUMER_GROUP_NAME)
                    .connectionString(CONNECTION_STRING, EVENT_HUB_NAME)
                    .credential("*******.servicebus.windows.net","maney-event-hub",createClientSecretCredential())
                    .buildAsyncConsumerClient();
            ReceiveOptions receiveOptions = new ReceiveOptions().setTrackLastEnqueuedEventProperties(true);
            List<String> block = eventHubConsumerAsyncClient.getPartitionIds().collectList().block();
            Iterator<String> iterator = block.stream().iterator();
            String partitionID = null;
            subscriptions = new ArrayList<>(block.size());
            while(iterator.hasNext()){
                partitionID = iterator.next();
                Disposable subscription = eventHubConsumerAsyncClient.receiveFromPartition(
                        partitionID,
                        EventPosition.fromOffset(0),receiveOptions).subscribe(PARTITION_PROCESSOR,ERROR_HANDLER);
                subscriptions.add(subscription);
            }
            System.in.read();
        }catch (Exception ex){
            ex.printStackTrace();
        } finally {
            if(subscriptions != null){
                subscriptions.forEach( subscrip -> {
                    subscrip.dispose();
                });
            }
        }
    }


    private final Consumer<PartitionEvent> PARTITION_PROCESSOR = partitionEvent -> {
        EventData event = partitionEvent.getData();
        PartitionContext partitionContext = partitionEvent.getPartitionContext();
        String contents = new String(event.getBody(), UTF_8);

        LastEnqueuedEventProperties properties = partitionEvent.getLastEnqueuedEventProperties();
        System.out.printf("Information received at %s. Last enqueued sequence number: %s%n",properties.getRetrievalTime(), properties.getSequenceNumber());

        System.out.printf("Partition[%s] with Offset-[%s] and Sequence Number[%s] has contents: '%s'%n",
                partitionContext.getPartitionId(),
                event.getOffset(),
                event.getSequenceNumber(),
                contents);
    };

    private final Consumer<Throwable> ERROR_HANDLER = errorContext -> {
        System.out.printf("Error occurred in partition processor");
        errorContext.printStackTrace();
    };


    public ClientSecretCredential createClientSecretCredential() {
        ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
                .clientId("****************")
                .clientSecret("******************")
                .tenantId("**********************")
                .build();
        return clientSecretCredential;
    }
private void processUsingProcessorClient(){
列表订阅=null;
试一试{
EventHubConsumerAsyncClient EventHubConsumerAsyncClient=new EventHubClientBuilder()
.consumerGroup(EventHubClientBuilder.DEFAULT\消费者\组\名称)
.connectionString(连接字符串、事件中心名称)
.credential(“*********.servicebus.windows.net”,“maney事件中心”,createClientSecretCredential())
.buildAsyncConsumerClient();
ReceiveOptions ReceiveOptions=new ReceiveOptions().setTrackLastEnqueuedEventProperties(true);
列表块=eventHubConsumerAsyncClient.GetPartitionId().collectList().block();
迭代器迭代器=block.stream().Iterator();
字符串partitionID=null;
订阅=新的ArrayList(block.size());
while(iterator.hasNext()){
partitionID=iterator.next();
一次性订阅=eventHubConsumerAsyncClient.receiveFromPartition(
分裂的,
EventPosition.fromOffset(0),receiveOptions).subscribe(分区处理器,错误处理程序);
订阅。添加(订阅);
}
System.in.read();
}捕获(例外情况除外){
例如printStackTrace();
}最后{
if(订阅!=null){
订阅。forEach(订阅->{
subscrip.dispose();
});
}
}
}
专用最终使用者分区\处理器=分区事件->{
EventData事件=partitionEvent.getData();
PartitionContext PartitionContext=partitionEvent.getPartitionContext();
字符串内容=新字符串(event.getBody(),UTF_8);
LastEnqueuedEventProperties=partitionEvent.getLastEnqueuedEventProperties();
System.out.printf(“在%s处收到的信息。上次排队的序列号:%s%n”,properties.getRetrievalTime(),properties.getSequenceNumber());
System.out.printf(“偏移量为-[%s]且序列号为[%s]的分区[%s]的内容为:“%s”%n“,
partitionContext.getPartitionId(),
event.getOffset(),
event.getSequenceNumber(),
内容);
};
私有最终使用者错误\u HANDLER=errorContext->{
System.out.printf(“分区处理器中发生错误”);
errorContext.printStackTrace();
};
公共ClientSecretCredential createClientSecretCredential(){
ClientSecretCredential ClientSecretCredential=new ClientSecretCredentialBuilder()
.clientId(“****************”)
.clientSecret(“*******************”)
.tenantId(“**********************”)
.build();
返回clientSecretCredential;
}
我能够从单个订阅中读取所有事件。然而,我也需要对来自不同订阅的这些事件进行数据分析。如何配置Azure Eventhub以侦听多个订阅

我读了Stackoverflow关于创建消费群体来解决这个问题的建议,但我不知道如何解决这个问题?我确实创建了消费者组,但如何将新创建的消费者组连接到azure AAAccount中的不同订阅,并将事件流式传输到我刚刚创建的eventhub? [注:我已跟进-https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-create 在azure上创建evenhub]

为了以防万一,如果我需要澄清我所说的订阅,下面是截图

我如何做到这一点? 先谢谢你


曼尼

所以我想出了解决问题的办法(如上所述)。在阅读了微软的文档和一些尝试和错误的方法之后,下面是我如何解决它的

我有SUBSCRIPTION-1和SUBSCRIPTION-2。我已在SUBSCRIPTION-2中创建了eventhub。 我转到SUBSCRIPTION-1 one并创建一个资源组。创建资源组后,我创建了一个事件网格。在eventgrid中,我创建了一个事件订阅,该订阅提供了一个将其指向端点的选项。我选择了端点并选择了在SUBSCRIPTION-1中创建的eventhub

现在,我可以将所有事件从SUBSCRIPTION-1流式传输到SUBSCRIPTION-2


-曼尼

我不确定我是否理解你的目标。Azure订阅是资源的顶级容器,是一个强大的边界。不能有跨越订阅的事件中心实例(或任何其他资源)。您可以在每个订阅中创建一个事件中心命名空间,然后从同一个应用程序中使用它们—这可能就是您所要求的。事件中心客户端的作用域为特定的事件中心;对于每个要阅读的内容,您需要一个不同的客户端。请编辑您的问题,使其包含格式化文本,而不是文本图像(尤其是代码)。这列出了许多重要的原因。另外:仅供参考-工具/产品/服务/教程/场外资源推荐问题是离题的。@DavidMakogon,代码格式,我已经编辑了我的查询。谢谢你给我指出这一点:-)