Запуск google pub/sub под Java 7 получает ALPN ClassNotFoundException

Я пытаюсь запустить небольшую тестовую программу, используя Google Cloud Pub/Sub (версии от 0.32.0 до 0.39.0) под Java 7. Код Google Cloud предположительно совместим с Java 7, но я обнаружил, что получаю Следующее исключение при запуске с 7. Java 8 работает нормально. Полное исключение здесь.

Exception in thread "main" java.lang.IllegalStateException: Expected the service
    InnerService [FAILED] to be RUNNING, but the service has FAILED
    ...
Caused by: java.lang.IllegalArgumentException: ALPN is not configured properly.
    See https://github.com/grpc/grpc-java/blob/master/SECURITY.md#troubleshooting
    for more information.
    ...
Caused by: java.lang.ClassNotFoundException: org/eclipse/jetty/alpn/ALPN
    ...

Насколько я могу судить, этот класс существует в пути к классам, хотя он не является частью загрузчика загрузчика классов, который ищет основной код gRPC/Netty.

// the line that causes the exception from JettyTlsUtil.isJettyAlpnConfigured()
Class.forName("org.eclipse.jetty.alpn.ALPN", true, null);

Чего я не понимаю, так это того, почему это происходит только в Java 7, и сейчас моя корпоративная кодовая база ограничена этим. Я попробовал ряд рекомендаций по устранению неполадок из Caused by вход без успеха.

Вопросы:

  • Любые рекомендации о том, что я делаю неправильно или как двигаться дальше?
  • Является ли этот класс ALPN действительно необходимым для кода pub/sub или это побочный продукт зависимости от gRPC и зависимостей netty?
  • Кто-нибудь еще видел это?

Благодарю.


Редактировать:

Просто заставил мою программу обойти ошибку, добавив следующую строку в командную строку, но она неправильно подключается к серверу через SSL, поэтому все равно не работает. Я запутался, если это "правильная вещь", и почему это не нужно в Java 8.

java -javaagent:/some/path/jetty-alpn-agent-2.0.7.jar ...

Ничто в документах Google Cloud, похоже, не указывает на то, что это требование, и я не получил ответа от этой проблемы Github, которую я представил на прошлой неделе.


Моя тестовая программа:

public class TestSubscriber {

    public static void main(String[] args) throws Exception {
        String projectId = "my-project-id";
        String subscriberId = "test-main";
        ProjectSubscriptionName subsciptionName = ProjectSubscriptionName.of(projectId, subscriberId);
        Subscriber.Builder builder = Subscriber.newBuilder(subsciptionName, new OurReceiver());

        GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("/tmp/creds.json"));
        builder.setCredentialsProvider(FixedCredentialsProvider.create(credentials));
        Subscriber subscriber = builder.build();
        subscriber.startAsync().awaitRunning();

        subscriber.awaitTerminated(10000000, TimeUnit.MILLISECONDS);
    }

    private static class OurReceiver implements MessageReceiver {
        @Override
        public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
            System.out.println("received message: " + message.getMessageId());
            consumer.ack();
        }
    }
}

Мой мавен pom.xml является:

<dependencies>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-pubsub</artifactId>
        <!-- I've tried other versions back to 0.32.0 -->
        <version>0.39.0-beta</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <!-- if I change the following to 1.8 it works -->
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

0 ответов

Другие вопросы по тегам