Clustered Vert.x на kubernetes - шина событий не отправляет сообщения удаленным потребителям - PullRequest
0 голосов
/ 02 июня 2019

Я установил кластер vert.x / hazelcast на платформе Kubernetes:

  • 2 Запуск экземпляров / модулей
  • Конфигурация с помощью подключаемого модуля Hazelcast Discovery для Kubernetes
  • В качестве метода обнаружения используется API Kubernetes

Сам кластер Hazelcast работает без проблем.Я вижу, что кластер состоит из двух членов:

[100.116.0.36]:5701 [dev] [3.12] 

Members {size:2, ver:8} [
    Member [100.122.0.1]:5701 - 4d42a914-a6a5-4d65-897d-835eb5f5da4d
    Member [100.116.0.36]:5701 - be0010b5-1a0e-4359-bc94-70078fe4f2d4 this
]

Я также использую общую карту, предоставленную Hazelcast, которая хорошо синхронизируется между двумя модулями.

Сам Vert.xоднако в журнал заносятся следующие предупреждения:

Connecting to server localhost:41635 failedConnection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:325)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:634)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:581)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)

Connecting to server localhost:37251 failedConnection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:325)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:634)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:581)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)

Эти сообщения могут быть не связаны напрямую с vert.x, но они исчезают при запуске в локальном режиме.

Я также настроил мониторинг с помощью микрометра, и vert.x не предоставляет никакого значения для vertx_eventbus_bytesWritten, как указано здесь: https://vertx.io/docs/vertx-micrometer-metrics/java/

Следовательно, я вполне уверен, что vert.x отправляет все сообщения локальным потребителям только из-за этих предупреждений.

Способ, которым я настроил vert.x в кластерном режиме, следующий:

VertxOptions vertxOptions = new VertxOptions();
vertxOptions.getEventBusOptions().setClustered(true);
vertxOptions.setClusterManager(new HazelcastClusterManager(hazelcastInstance)); // the hazelcast instance itself is setup by spring boot which i'm using for dependency injection

Vertx.rxClusteredVertx(vertxOptions).doOnSuccess((result -> {
            LOGGER.info("Clustered vertx setup complete. Deploying vertices....");
           // ...
        })).doOnError((throwable -> {
            LOGGER.error("Failed to setup clustered verx.", throwable);
        }));

Не предоставляет никаких журналов ошибок.

Есть мысли о том, что здесь происходит не так?Буду очень признателен.

1 Ответ

0 голосов
/ 03 июня 2019

Если вы создаете VertxOptions вручную, вы должны установить параметр clusterHost:

vertxOptions.getEventBusOptions().setClusterHost("the-pod-address")

По умолчанию хост кластера равен localhost, поэтому связь с кластером прерывается.

...