不懂vert.x?直接实战!基于Event Bus的交互演示

140 篇文章 1 订阅
83 篇文章 0 订阅

1.代码展示

第一个vertx服务启动类

package org.example;

import com.hazelcast.config.Config;
import com.hazelcast.config.FileSystemXmlConfig;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.eventbus.EventBusOptions;
import io.vertx.spi.cluster.hazelcast.HazelcastClusterManager;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @Author: Administrator
 * @Description:
 * @Date: 2020/7/16 10:42
 * @Version: 1.0
 */
public class AppCluster {

    public static void main(String[] args) throws  UnknownHostException {
        final VertxOptions vertxOptions = new VertxOptions();
        EventBusOptions eventBusOptions = new EventBusOptions();
        // 本机局域网Ip
        String hostAddress = InetAddress.getLocalHost().getHostAddress();
        vertxOptions.setEventBusOptions(eventBusOptions).getEventBusOptions().setHost(hostAddress);

        HazelcastClusterManager clusterManager = new HazelcastClusterManager();

        vertxOptions.setClusterManager(clusterManager);

        Vertx.clusteredVertx(vertxOptions, res -> {
            Vertx result = res.result();
            result.deployVerticle(new MainClusterVerticle(), r -> {
                if (r.succeeded()) {
                    System.out.println(MainClusterVerticle.class.getName() + " --> 部署成功");
                } else {
                    r.cause().printStackTrace();
                    System.err.println(MainClusterVerticle.class.getName() + " --> 部署失败, " + r.cause().getMessage());
                }
            });
        });
    }
}

第一个vertx服务verticle

package org.example;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServer;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;

public class MainClusterVerticle extends AbstractVerticle {

  public void start() {
    System.out.println("start thread" + Thread.currentThread().getName());
    //发布eventbus服务
    vertx.eventBus().consumer("com.xiaoniu.bus", msg -> {
      System.out.println("read thread" + Thread.currentThread().getName());
      System.out.println("收到消息");
      System.out.println(msg != null ? ((JsonObject) msg.body()).encodePrettily() : "没有消息");
      JsonObject j = new JsonObject();
      j.put("info", "我是Main");
      msg.reply(j);
    });
    //发布web服务

    // 创建HttpServer
    HttpServer server = vertx.createHttpServer();
    // 创建路由对象
    Router router = Router.router(vertx);

    // 监听/index地址
    router.route("/index").handler(request -> {
      request.response().end("INDEX SUCCESS");
    });

    // 监听/index地址
    router.route("/index1").handler(request -> {
      request.response().end("INDEX1 SUCCESS");
    });
    // 把请求交给路由处理--------------------(1)
    server.requestHandler(router);
    server.listen(8888);
  }
}

第二个vertx服务启动类

package org.example;

import com.hazelcast.config.Config;
import com.hazelcast.config.FileSystemXmlConfig;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.eventbus.EventBusOptions;
import io.vertx.spi.cluster.hazelcast.HazelcastClusterManager;

import java.io.FileNotFoundException;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * @Author: Administrator
 * @Description:
 * @Date: 2020/7/16 10:42
 * @Version: 1.0
 */
public class AppCluster2 {

    public static void main(String[] args) throws  UnknownHostException {
        final VertxOptions vertxOptions = new VertxOptions();
        EventBusOptions eventBusOptions = new EventBusOptions();
        // 本机Ip
        String hostAddress = InetAddress.getLocalHost().getHostAddress();
        vertxOptions.setEventBusOptions(eventBusOptions).getEventBusOptions().setHost(hostAddress);

        HazelcastClusterManager clusterManager = new HazelcastClusterManager();

        vertxOptions.setClusterManager(clusterManager);
        Vertx.clusteredVertx(vertxOptions, res -> {
            Vertx result = res.result();
            result.deployVerticle(new MainClusterVerticle2(), r -> {
                if (r.succeeded()) {
                    System.out.println(MainClusterVerticle2.class.getName() + " --> 部署成功");
                } else {
                    r.cause().printStackTrace();
                    System.err.println(MainClusterVerticle2.class.getName() + " --> 部署失败, " + r.cause().getMessage());
                }
            });
        });
    }
}

第二个vertx服务verticle

package org.example;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServer;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;

public class MainClusterVerticle2 extends AbstractVerticle {
  public void start() {
    System.out.println("start thread" + Thread.currentThread().getName());
    //发布web服务

    // 创建HttpServer
    HttpServer server = vertx.createHttpServer();
    // 创建路由对象
    Router router = Router.router(vertx);
    // 监听/index地址
    router.route("/index").handler(request -> {
      System.out.println("haha" + Thread.currentThread().getName());
      System.out.println("时间到了,发送消息");
      JsonObject json = new JsonObject().put("info", "我是另主");
      System.out.println("send thread" + Thread.currentThread().getName());
      //通过eventbus发送请求
      vertx.eventBus().request("com.xiaoniu.bus", json, msg -> {
        System.out.println("read thread" + Thread.currentThread().getName());
        if (msg.succeeded()) {
          System.out.println(msg.result() != null
                  ? ((JsonObject)msg.result().body()).encodePrettily()
                  : "没有信息");
        } else {
          System.err.println(msg.cause().getMessage());
          msg.cause().printStackTrace();
        }
      });
      request.response().end("INDEX SUCCESS");
    });

    // 把请求交给路由处理--------------------(1)
    server.requestHandler(router);
    server.listen(7777);


  }
}

2.对外采用http交互

不懂vert.x?直接实战!基于Event Bus的交互演示

 

对内采用EventBus请求应答模式

请求

不懂vert.x?直接实战!基于Event Bus的交互演示

 

答复

不懂vert.x?直接实战!基于Event Bus的交互演示

 

3.目录结构

不懂vert.x?直接实战!基于Event Bus的交互演示

 

4.效果

http请求

不懂vert.x?直接实战!基于Event Bus的交互演示

 

EventBus请求答复

不懂vert.x?直接实战!基于Event Bus的交互演示

 

不懂vert.x?直接实战!基于Event Bus的交互演示

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值