Vertx:ServiceDiscovery跟EventBus有啥关系?

Vertx项目中,向EventBus中发送消息,可以用vertx.eventBus().publish() / send()方法。

那么,服务发现中的ServiceDiscovery里的discovery.publish一种MessageSource类型的消息源,它里面的消息发布和consume

与直接用eventbus发布/消费消息有什么不一样呢?

我在一个verticle中发布消息,用这两种方式消费消息,代码如下->

消息发布:

publishMessageRecord("zhihu-day-web", "spider", pubAr -> {
            if (pubAr.failed()) {
                LOG.info(" publish failed : error = " + pubAr.cause().getMessage());
            } else {
                LOG.info(" publish success ");
            }
        });

        vertx.setPeriodic(3000, id -> {
            // 点对点
            vertx.eventBus().send("spider", new JsonObject()
                    .put("timestamp:", System.currentTimeMillis())
                    .put("id", id));
            // 订阅发布
//            vertx.eventBus().publish("spider",
//                    new JsonObject()
//                            .put("timestamp:", System.currentTimeMillis())
//                            .put("id", id));
            LOG.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        });


消息消费:

Future<MessageConsumer<JsonObject>> consumerFut = Future.future();
MessageSource.getConsumer(serviceDiscovery, new JsonObject().put("name", "zhihu-day-web"), consumerFut.completer());
consumerFut.setHandler(consumerAr -> {
    if (consumerAr.failed()) {
        LOG.info(consumerAr.cause().getMessage());
    } else {
        LOG.info("consume message");
        MessageConsumer<JsonObject> messageConsumer = consumerAr.result();
        messageConsumer.handler(message -> {
           LOG.info("received message: " + message.body().encodePrettily());
        });
    }
});

vertx.eventBus().<JsonObject>consumer("spider").handler(msg -> {
   LOG.info("ContentAnalysisVerticle:" + msg.body().encodePrettily());
});

消息发布时,只能通过vertx.eventBus()发布消息,采用订阅模式时,发现这两种消费方法都触发了消息事件。

而如果采用点对点通信(send())则只有vertx.eventBus().<JsonObject>consumer()方法获取到了事件通知,而上面的方法并没有动作。

也就是说,优先发送到了下面的方法。

还有,MessageSource是带name属性的,获取record也是靠这个name作区分的;

EventBus.consumer的参数是address,针对一个地址,相对的范围更大些。


总结:发布服务之后还是需要eventbus发布消息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值