Pulsar Spring Boot 无法从 sun.net.InetAddressCachePolicy 获取 DNS TTL 设置。

huangapple go评论442阅读模式
英文:

Pulsar Spring Boot Cannot get DNS TTL settings from sun.net.InetAddressCachePolicy

问题

I am trying to initialize PulsarClient in spring-boot's configuration class using the following code but getting

Java Details:

<properties>
    <java.version>20</java.version>
    <pulsar.version>3.0.0</pulsar.version>
    <spring.boot.version>3.1.0</spring.boot.version>
</properties>
@Configuration
public class PulsarConfiguration {

    @Bean
    public PulsarClient pulsarClient() throws PulsarClientException {
        return PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();
    }
}

Error:

Cannot get DNS TTL settings from sun.net.InetAddressCachePolicy class

java.lang.IllegalAccessException: class org.apache.pulsar.common.util.netty.DnsResolverUtil cannot access class sun.net.InetAddressCachePolicy (in module java.base) because module java.base does not export sun.net to unnamed module @6069db50
	at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394) ~[na:na]
	at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:709) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
	at org.apache.pulsar.common.util.netty.DnsResolverUtil.<clinit>(DnsResolverUtil.java:46) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.createAddressResolver(ConnectionPool.java:159) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.lambda$new$1(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
	at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na]
	at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:95) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:90) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:196) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:153) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:63) ~[pulsar-client-3.0.0.jar:3.0.0]
	at in.silentsudo.springbootmongodbdatagenerator.PulsarConfiguration.pulsarClient(PulsarConfiguration.java:16) ~[classes/:na]

Ref:
Found a thread here https://github.com/apache/pulsar/issues/20282, but I do not wish to downgrade, thank you.

英文:

I am trying to initialize PulsarClient in spring-boot's configuration class using the following code but getting

Java Details:

 &lt;properties&gt;
        &lt;java.version&gt;20&lt;/java.version&gt;
        &lt;pulsar.version&gt;3.0.0&lt;/pulsar.version&gt;
        &lt;spring.boot.version&gt;3.1.0&lt;/spring.boot.version&gt;
 &lt;/properties&gt;
@Configuration
public class PulsarConfiguration {

    @Bean
    public PulsarClient pulsarClient() throws PulsarClientException {
        return PulsarClient.builder().serviceUrl(&quot;pulsar://localhost:6650&quot;).build();
    }
}

#Error:

Cannot get DNS TTL settings from sun.net.InetAddressCachePolicy class

java.lang.IllegalAccessException: class org.apache.pulsar.common.util.netty.DnsResolverUtil cannot access class sun.net.InetAddressCachePolicy (in module java.base) because module java.base does not export sun.net to unnamed module @6069db50
	at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394) ~[na:na]
	at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:709) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
	at org.apache.pulsar.common.util.netty.DnsResolverUtil.&lt;clinit&gt;(DnsResolverUtil.java:46) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.createAddressResolver(ConnectionPool.java:159) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.lambda$new$1(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
	at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na]
	at org.apache.pulsar.client.impl.ConnectionPool.&lt;init&gt;(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.&lt;init&gt;(ConnectionPool.java:95) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ConnectionPool.&lt;init&gt;(ConnectionPool.java:90) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.PulsarClientImpl.&lt;init&gt;(PulsarClientImpl.java:196) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.PulsarClientImpl.&lt;init&gt;(PulsarClientImpl.java:153) ~[pulsar-client-3.0.0.jar:3.0.0]
	at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:63) ~[pulsar-client-3.0.0.jar:3.0.0]
	at in.silentsudo.springbootmongodbdatagenerator.PulsarConfiguration.pulsarClient(PulsarConfiguration.java:16) ~[classes/:na]

#Ref:
Found a thread here https://github.com/apache/pulsar/issues/20282, but I do not wish to downgrade, thank you.


</details>


# 答案1
**得分**: 1

This is unavoidable as of JDK17 and the only way I know to get rid of the warning is to `add-opens` at JVM launch time. By the time we are in the Java client there is nothing that can be done (see [this article](https://docs.oracle.com/en/java/javase/17/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-12F945EB-71D6-46AF-8C3D-D354FD0B1781) for more info on `add-opens`). As such, the only "downgrade" would be to go back to a lower JDK **OR** set the `add-opens` at JVM launch time. Here is an example of where we set it in [spring-pulsar](https://github.com/spring-projects/spring-pulsar/commit/cd8adafa079cfdfc9aa6a523d68db0906b22da83).

**TIP:** It looks like you are constructing the client yourself. I am not sure if you are using `spring-pulsar` or not, but when using `spring-pulsar` and `spring-boot`, the client is [automatically configured for you](https://docs.spring.io/spring-pulsar/docs/current-SNAPSHOT/reference/html/#pulsar-client).

<details>
<summary>英文:</summary>



This is unavoidable as of JDK17 and the only way I know to get rid of the warning is to `add-opens` at JVM launch time. By the time we are in the Java client there is nothing that can be done (see [this article](https://docs.oracle.com/en/java/javase/17/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-12F945EB-71D6-46AF-8C3D-D354FD0B1781) for more info on `add-opens`). As such, the only &quot;downgrade&quot; would be to go back to a lower JDK **OR** set the `add-opens` at JVM launch time. Here is an example of where we set it in [spring-pulsar](https://github.com/spring-projects/spring-pulsar/commit/cd8adafa079cfdfc9aa6a523d68db0906b22da83).


**TIP:** It looks like you are constructing the client yourself. I am not sure if you are using `spring-pulsar` or not, but when using `spring-pulsar` and `spring-boot`, the client is [automatically configured for you](https://docs.spring.io/spring-pulsar/docs/current-SNAPSHOT/reference/html/#pulsar-client).

</details>



huangapple
  • 本文由 发表于 2023年5月21日 15:45:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/76298815.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定