gpt4 book ai didi

java - 注册EventProcessorHost时失败

转载 作者:行者123 更新时间:2023-12-02 11:52:43 24 4
gpt4 key购买 nike

我正在尝试使用 EventProcessorHost 在 JAVA 中使用来自 eventhub 的消息。按照给出的步骤 here1here2但是当我运行代码时,出现以下错误..

Registering host named <name>

Failure while registering: java.util.concurrent.ExecutionException: com.microsoft.azure.storage.StorageException: The client could not finish the operation within specified maximum execution timeout.
Press enter to stop

更多详细信息:

  1. 按照博客中所述创建了新的存储帐户,并创建了 blob。

  2. EventProcessor 类和 ErrorNotificationHandler 类与 Microsoft 文档中提到的完全相同。

  3. 调用寄存器的代码如下...

    final String consumerGroupName = "test";
    final String namespaceName = "--namespace--";
    final String eventHubName = "--eventhub name --";
    final String sasKeyName = "--saskey name--";
    final String sasKey = "--sas-key";
    final String containerName = "--container name --";
    final String storageAccountName = "--storage account name --";
    final String storageAccountKey = "--storage -- account key--";
    final String connectionString = "--eventhub connection string copied from azure portal --";
    final String storageConString = "--storage connection string copied from azure portal --";

    EventProcessorHost host = new EventProcessorHost(
    namespaceName, // Also tried with full name <namespace name>.servicebus.windows.net
    eventHubName,
    consumerGroupName,
    connectionString,
    storageConString,
    containerName
    // "<blobprefix>" Also tried with blob prefix
    );

    System.out.println("Registering host named " + host.getHostName());
    EventProcessorOptions options = new EventProcessorOptions();
    options.setReceiveTimeOut(Duration.ofMinutes(12 L));
    options.setExceptionNotification(new ErrorNotificationHandler());

    try {

    host.registerEventProcessor(EventProcessor.class, options).get(15, TimeUnit.MINUTES);

    } catch (Exception e) {
    System.out.print("Failure while registering: ");
    if (e instanceof ExecutionException) {
    Throwable inner = e.getCause();
    System.out.println(inner.toString());
    } else {
    System.out.println(e.toString());
    }
    }

注意:博客已弃用 EventProcessorHost 的构造函数。

在线搜索错误,我发现的是增加存储超时,但不确定如何证明 EventProcessorHost 中存储的特定超时。任何帮助表示赞赏。

最佳答案

我关注了official document从事件中心接收消息,它对我来说效果很好。

enter image description here

消息存储到我配置的 Azure Blob 存储中。

enter image description here

根据您的描述,即使您在EventProcessorOptions中将ReceiveTimeOut设置为12分钟,仍然出现超时异常。根据我的经验,即使是一条一条的收到消息,也不可能需要12分钟那么长的时间。而我们的应用程序中通常不可能将超时设置得这么长。所以我认为错误不再来自SDK级别。可能是网络环境问题。

据我所知,Event Hub消息发送客户端使用HTTP协议(protocol),不会被防火墙阻止。 EPH消息接收客户端使用AMQP协议(protocol),该协议(protocol)本质上是TCP协议(protocol),并且会受到代理服务器设置或防火墙的限制。我假设您的 Eph 客户端没有与事件中心的连接。

我不知道您的实际网络环境,建议您检查代理设置或防火墙白名单,以排查网络环境问题。

如有任何疑问,请告诉我。

关于java - 注册EventProcessorHost时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47779279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com