Rx java 无法从vertx群集中的ServiceDiscovery获取记录

Rx java 无法从vertx群集中的ServiceDiscovery获取记录,rx-java,vert.x,service-discovery,Rx Java,Vert.x,Service Discovery,我在本地机器上有一个vert.x群集。有两条竖线 public class AccountVerticle extends AbstractVerticle { private ServiceDiscovery discovery; private static final Logger logger = LoggerFactory.getLogger(AccountVerticle.class); @Override public void start(F

我在本地机器上有一个vert.x群集。有两条竖线

public class AccountVerticle extends AbstractVerticle {

    private ServiceDiscovery discovery;

    private static final Logger logger = LoggerFactory.getLogger(AccountVerticle.class);

    @Override
    public void start(Future<Void> fut) {
        Vertx vertx = Vertx.vertx();
        Router router = Router.router(vertx);
        router.route().handler(BodyHandler.create());
        router.get("/api/account").handler(this::get);

        discovery = ServiceDiscovery.create(vertx);
        createHttpServer(router).subscribe((server, err) -> {
            if (err != null) {
                logger.error("Error while starting server", err);
            } else {
                logger.info("Server has been successfully started");
                discovery.rxPublish(HttpEndpoint.createRecord("accounts", "localhost", 8080, "/api"))
                        .subscribe((rec,error) -> {
                            if (error != null) {
                                logger.error("Error while starting record", err);
                            } else {
                                logger.info("Record has been successfully published");
                                discovery.rxGetRecords(record -> true)
                                        .subscribe((records, throwable) -> {
                                            logger.info(records.get(0).getLocation());
                                        });
                            }
                        });
            }
        });
    }

    private Single<HttpServer> createHttpServer(Router router) {
        return vertx
                .createHttpServer()
                .requestHandler(router)
                .rxListen(8080);
    }

    private void get(RoutingContext rc) {
        Single.just(new JsonObject("{\"account\":\"test\"}")).subscribe(ActionHelper.ok(rc));
    }
}


public class CustomerVerticle extends AbstractVerticle {

    private ServiceDiscovery discovery;

    private static final Logger logger = LoggerFactory.getLogger(CustomerVerticle.class);

    @Override
    public void start(Future<Void> fut) {
        Vertx vertx = Vertx.vertx();
        Router router = Router.router(vertx);
        router.route().handler(BodyHandler.create());
        router.post("/api/customers/:id/accounts").handler(this::updateCustomerAccount);

        discovery = ServiceDiscovery.create(vertx);
        createHttpServer(router).subscribe((server, err) -> {
            if (err != null) {
                logger.error("Error while starting server", err);
            } else {
                logger.info("Server has been successfully started");
                discovery.rxGetRecords(record -> true)
                            .subscribe((records, throwable) -> {
                                logger.info(records);
                            });
            }
        });
    }

    private Single<HttpServer> createHttpServer(Router router) {
        return vertx
                .createHttpServer()
                .requestHandler(router)
                .rxListen(8090);
    }

    private void updateCustomerAccount(RoutingContext rc) {

        HttpEndpoint.rxGetWebClient(discovery, record -> {
                        return record.getName().equals("accounts");
                    })
                    .flatMap(httpClient -> {
                        return httpClient.get("/api")
                                    .as(BodyCodec.string())
                                    .rxSend();
                    }).subscribe((response, err) -> {
                        logger.info(response);
                        Single.just(new JsonObject("{\"customer\":\"test\"}")).subscribe(ActionHelper.ok(rc));
                    });
    }
}
定制日志

Connected to the target VM, address: '127.0.0.1:36463', transport: 'socket'
Mar 04, 2019 12:04:41 AM io.vertx.core.impl.launcher.commands.RunCommand
INFO: Starting clustering...
Mar 04, 2019 12:04:41 AM io.vertx.core.impl.launcher.commands.RunCommand
INFO: No cluster-host specified so using address 172.18.0.1
Mar 04, 2019 12:04:43 AM com.hazelcast.instance.AddressPicker
INFO: [LOCAL] [dev] [3.10.5] Prefer IPv4 stack is true.
Mar 04, 2019 12:04:43 AM com.hazelcast.instance.AddressPicker
INFO: [LOCAL] [dev] [3.10.5] Picked [192.168.0.105]:5702, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5702], bind any local is true
Mar 04, 2019 12:04:43 AM com.hazelcast.system
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Hazelcast 3.10.5 (20180913 - 6ffa2ee) starting at [192.168.0.105]:5702
Mar 04, 2019 12:04:43 AM com.hazelcast.system
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Copyright (c) 2008-2018, Hazelcast, Inc. All Rights Reserved.
Mar 04, 2019 12:04:43 AM com.hazelcast.system
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Configured Hazelcast Serialization version: 1
Mar 04, 2019 12:04:43 AM com.hazelcast.instance.Node
INFO: [192.168.0.105]:5702 [dev] [3.10.5] A non-empty group password is configured for the Hazelcast member. Starting with Hazelcast version 3.8.2, members with the same group name, but with different group passwords (that do not use authentication) form a cluster. The group password configuration will be removed completely in a future release.
Mar 04, 2019 12:04:43 AM com.hazelcast.spi.impl.operationservice.impl.BackpressureRegulator
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Backpressure is disabled
Mar 04, 2019 12:04:43 AM com.hazelcast.spi.impl.operationservice.impl.InboundResponseHandlerSupplier
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Running with 2 response threads
Mar 04, 2019 12:04:44 AM com.hazelcast.instance.Node
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Creating MulticastJoiner
Mar 04, 2019 12:04:45 AM com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Starting 4 partition threads and 3 generic threads (1 dedicated for priority tasks)
Mar 04, 2019 12:04:45 AM com.hazelcast.internal.diagnostics.Diagnostics
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Diagnostics disabled. To enable add -Dhazelcast.diagnostics.enabled=true to the JVM arguments.
Mar 04, 2019 12:04:45 AM com.hazelcast.core.LifecycleService
INFO: [192.168.0.105]:5702 [dev] [3.10.5] [192.168.0.105]:5702 is STARTING
Mar 04, 2019 12:04:45 AM com.hazelcast.internal.cluster.impl.MulticastJoiner
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Trying to join to discovered node: [192.168.0.105]:5701
Mar 04, 2019 12:04:45 AM com.hazelcast.nio.tcp.TcpIpConnector
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Connecting to /192.168.0.105:5701, timeout: 0, bind-any: true
Mar 04, 2019 12:04:45 AM com.hazelcast.nio.tcp.TcpIpConnectionManager
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Established socket connection between /192.168.0.105:58085 and /192.168.0.105:5701
Mar 04, 2019 12:04:51 AM com.hazelcast.system
INFO: [192.168.0.105]:5702 [dev] [3.10.5] Cluster version set to 3.10
Mar 04, 2019 12:04:51 AM com.hazelcast.internal.cluster.ClusterService
INFO: [192.168.0.105]:5702 [dev] [3.10.5] 

Members {size:2, ver:2} [
    Member [192.168.0.105]:5701 - 2a3f5096-5a47-4ade-9e0c-ce1d1d3b4e0f
    Member [192.168.0.105]:5702 - 8f030de2-dc19-4f02-96db-abcb53114bad this
]

Mar 04, 2019 12:04:52 AM com.hazelcast.core.LifecycleService
INFO: [192.168.0.105]:5702 [dev] [3.10.5] [192.168.0.105]:5702 is STARTED
Mar 04, 2019 12:04:53 AM io.vertx.core.impl.VertxImpl
WARNING: You're already on a Vert.x context, are you sure you want to create a new Vertx instance?
Mar 04, 2019 12:04:53 AM ua.home.customers.CustomerVerticle
INFO: Server has been successfully started
Mar 04, 2019 12:04:53 AM ua.home.customers.CustomerVerticle
INFO: []
这是一个java项目

更新:我可以在服务发现中发布一条记录,并在hazelcast集群的其他垂直站点中使用该记录吗

我找到了线索 仅使用-cluster参数运行Verticle类是不够的。 必须初始化HazelcastClusterManager

请注意我下面的例子

@Override
public void start(Future<Void> future) throws Exception {
    Config hazelcastConfig = ConfigUtil.loadConfig();
    hazelcastConfig.getGroupConfig()
            .setName("tsv-cluster");
    ClusterManager mgr = new HazelcastClusterManager(hazelcastConfig);
    VertxOptions options = new VertxOptions().setClusterManager(mgr);
    Vertx.rxClusteredVertx(options).subscribe(vertx -> {
        // TODO
    });
}
@覆盖
public void start(未来)引发异常{
Config hazelcastConfig=ConfigUtil.loadConfig();
hazelcastConfig.getGroupConfig()
.setName(“tsv集群”);
ClusterManager mgr=新的HazelcastClusterManager(hazelcastConfig);
VertxOptions options=新的VertxOptions().setClusterManager(mgr);
rxClusteredVertx(选项)。订阅(Vertx->{
//待办事项
});
}
@Override
public void start(Future<Void> future) throws Exception {
    Config hazelcastConfig = ConfigUtil.loadConfig();
    hazelcastConfig.getGroupConfig()
            .setName("tsv-cluster");
    ClusterManager mgr = new HazelcastClusterManager(hazelcastConfig);
    VertxOptions options = new VertxOptions().setClusterManager(mgr);
    Vertx.rxClusteredVertx(options).subscribe(vertx -> {
        // TODO
    });
}