我使用的是:
- Quarkus 1.6.1.最终版本
- Vertx 3.9.1(由quarkus-Vertx依赖提供,请参阅下面的pom.xml(
而且我无法使集群Eventbus工作。我遵循了这里列出的说明:
https://vertx.io/docs/vertx-hazelcast/java/
我还在Quarkus中启用了集群:
quarkus.vertx.cluster.clustered=true
quarkus.vertx.cluster.port=8081
quarkus.vertx.prefer-native-transport=true
quarkus.http.port=8080
这是我的pom.xml:
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-mutiny</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-vertx</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-hazelcast</artifactId>
<version>3.9.2</version>
<exclusions>
<exclusion>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
</exclusion>
<!-- <exclusion>-->
<!-- <groupId>com.hazelcast</groupId>-->
<!-- <artifactId>hazelcast</artifactId>-->
<!-- </exclusion>-->
</exclusions>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.hazelcast</groupId>-->
<!-- <artifactId>hazelcast-all</artifactId>-->
<!-- <version>3.9</version>-->
<!-- </dependency>-->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-epoll</artifactId>
<classifier>linux-x86_64</classifier>
</dependency>
</dependencies>
我得到的错误如下:
Caused by: java.lang.ClassNotFoundException: com.hazelcast.core.MembershipListener
正如你在我的pom.xml中看到的,我还添加了依赖项hazecast-all:3.9,并从vertx hazecast:3.9.2中排除了hazecast依赖项,然后这个错误消失了,但又出现了另一个错误:
Caused by: com.hazelcast.config.InvalidConfigurationException: cvc-complex-type.2.4.a: Invalid content was found starting with element '{"http://www.hazelcast.com/schema/config":memcache-protocol}'. One of '{"http://www.hazelcast.com/schema/config":public-address, "http://www.hazelcast.com/schema/config":reuse-address, "http://www.hazelcast.com/schema/config":outbound-ports, "http://www.hazelcast.com/schema/config":join, "http://www.hazelcast.com/schema/config":interfaces, "http://www.hazelcast.com/schema/config":ssl, "http://www.hazelcast.com/schema/config":socket-interceptor, "http://www.hazelcast.com/schema/config":symmetric-encryption, "http://www.hazelcast.com/schema/config":member-address-provider}' is expected.
我是做错了什么还是忘记了什么,或者这只是Quarkus或Vertx中的一个错误?
请提前寻求任何帮助。
我认为您的问题最可能的原因是您使用的quarkus-universe-bom
强制执行了与vertx-hazelcast
不兼容的Hazelcast版本(我们在那里有一个Hazelccast扩展(。
使用mvn dependency:tree
检查依赖关系树,并确保Hazelcast工件的版本为vertx-hazelcast
所需的版本。
另一种选择是简单地使用不强制执行Hazelcast版本的quarkus-bom
,并让vertx-hazelcast
自己拖动依赖项。
这似乎是Quarkus中的一个错误,此问题与:有关
https://github.com/quarkusio/quarkus/issues/10889
把它从冬天的睡眠中带出来。。。
我希望使用quarkus 2+vert.x 4,并使用共享数据vert.x api或vert.x集群管理器,以实现进程内分布式缓存(与外部dist.cache集群相反(
我还不清楚的是,通过查看上面描述的git问题(这仍然是开放的(,我是否可以指望这些API在我提到的版本中为我工作。
任何评论都会很棒!
提前感谢。。。
[更新]:使用共享数据API以及quarkus、vertx、hazlecast&静默vertx的绑定(所有版本都是最新版本(。
我所需要做的就是在quarkus属性文件中设置quarkus.vertx.cluster.clustered=true,对分布式缓存使用vertx.sharedData((.getClusterWideMap实现,并添加gradle/maven'io.vertx:vertx-hazelcast:4.4.1'支持。
一般来说,这就是一个小poc代码所需要的全部内容。感谢