Запуск 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>