最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vertx基于EventBus發(fā)送接受自定義對(duì)象

 更新時(shí)間:2020年11月16日 11:26:50   作者:侯賽雷  
這篇文章主要介紹了Vertx基于EventBus發(fā)送接受自定義對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

先看官方文檔步驟:

需要一個(gè)編解碼器,看源碼:

可見(jiàn)內(nèi)置了需要數(shù)據(jù)類型的實(shí)現(xiàn),所以發(fā)送其他消息可以發(fā)送,但是如果發(fā)送自定義對(duì)象就需要自己實(shí)現(xiàn)編解碼邏輯了

一 自定義編解碼器

/**
 * 自定義對(duì)象編解碼器,兩個(gè)類型可用于消息轉(zhuǎn)換,即發(fā)送對(duì)象轉(zhuǎn)換為接受需要的對(duì)象
 */
public class CustomizeMessageCodec implements MessageCodec<OrderMessage, OrderMessage> {
  /**
   * 將消息實(shí)體封裝到Buffer用于傳輸
   * 實(shí)現(xiàn)方式:使用對(duì)象流從對(duì)象中獲取Byte數(shù)組然后追加到Buffer
   */
  @Override
  public void encodeToWire(Buffer buffer, OrderMessage orderMessage) {
    final ByteArrayOutputStream b = new ByteArrayOutputStream();
    try (ObjectOutputStream o = new ObjectOutputStream(b)){
      o.writeObject(orderMessage);
      o.close();
      buffer.appendBytes(b.toByteArray());
    } catch (IOException e) { e.printStackTrace(); }
  }
  //從Buffer中獲取消息對(duì)象
  @Override
  public OrderMessage decodeFromWire(int pos, Buffer buffer) {
    final ByteArrayInputStream b = new ByteArrayInputStream(buffer.getBytes());
    OrderMessage msg = null;
    try (ObjectInputStream o = new ObjectInputStream(b)){ msg = (OrderMessage) o.readObject();
    } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); }
    return msg;
  }
  //消息轉(zhuǎn)換
  @Override
  public OrderMessage transform(OrderMessage orderMessage) {
    System.out.println("消息轉(zhuǎn)換---");//可對(duì)接受消息進(jìn)行轉(zhuǎn)換,比如轉(zhuǎn)換成另一個(gè)對(duì)象等
    orderMessage.setName("姚振");
    return orderMessage;
  }
  @Override
  public String name() { return "myCodec"; }
  //識(shí)別是否是用戶自定義編解碼器,通常為-1
  @Override
  public byte systemCodecID() { return -1; }
  public static MessageCodec create() {
    return new CustomizeMessageCodec();
  }
}

這里有一個(gè)點(diǎn)要注意,nam方法是必須的,且發(fā)送的時(shí)候一定要指明name

二 發(fā)送消息編寫(xiě)

public class ProducerVerticle extends AbstractVerticle {
  @Override
  public void start() throws Exception {
    EventBus eventBus = vertx.eventBus();
    //發(fā)布消息(群發(fā))
    eventBus.publish("com.hou", "群發(fā)祝福!");
    //發(fā)送消息(單發(fā)),只會(huì)發(fā)送注冊(cè)此地址的一個(gè),采用不嚴(yán)格的輪詢算法選擇
    DeliveryOptions options = new DeliveryOptions();//設(shè)置消息頭等
    options.addHeader("some-header", "some-value");
    eventBus.send("com.hou", "單發(fā)消息",options,ar->{
      if(ar.succeeded()) System.out.println("收到消費(fèi)者確認(rèn)信息:"+ar.result().body());
    });
    //發(fā)送自定義對(duì)象,需要編解碼器
    eventBus.registerCodec(CustomizeMessageCodec.create());//注冊(cè)編碼器
    DeliveryOptions options1 = new DeliveryOptions().setCodecName("myCodec");//必須指定名字
    OrderMessage orderMessage = new OrderMessage();
    orderMessage.setName("侯征");
    eventBus.send("com.hou", orderMessage, options1);
  }
}

三 接受消息Verticle編寫(xiě)

public class ConsumerVerticle extends AbstractVerticle {
  @Override
  public void start() throws Exception {
    //每個(gè)Vertx實(shí)例默認(rèn)是單例
    EventBus eb = vertx.eventBus();
    //注冊(cè)處理器,消費(fèi)com.hou發(fā)送的消息
    MessageConsumer<Object> consumer = eb.consumer("com.hou");//訂閱地址
    consumer.handler(message -> {//消息處理器
      if(message.body() instanceof OrderMessage){
        System.out.println("接受到對(duì)象: " + ((OrderMessage) message.body()).getName());
      }
      System.out.println("我是普通消費(fèi)者: " + message.body());
      message.reply("收到了!"); // 回復(fù)生產(chǎn)者,send才能接受
    }).completionHandler(res -> {//注冊(cè)完成后通知事件,適用于集群中比較慢的情況下
        System.out.println("注冊(cè)處理器結(jié)果"+res.succeeded());
    });
    //撤銷處理器
    //consumer.unregister();
  }
}

四 注冊(cè)部署Verticcle

vertx.deployVerticle(ConsumerVerticle.class.getName());
    TimeUnit.SECONDS.sleep(1);
    vertx.deployVerticle(ProducerVerticle.class.getName());

五 測(cè)試

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue+Express實(shí)現(xiàn)登錄注銷功能的實(shí)例代碼

    Vue+Express實(shí)現(xiàn)登錄注銷功能的實(shí)例代碼

    這篇文章主要介紹了Vue+Express實(shí)現(xiàn)登錄,注銷功能,本文通過(guò)實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Vue.js中兄弟組件之間互相傳值實(shí)例

    Vue.js中兄弟組件之間互相傳值實(shí)例

    本篇文章主要介紹了Vue.js中兄弟組件之間互相傳值實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • vue.js input框之間賦值方法

    vue.js input框之間賦值方法

    今天小編就為大家分享一篇vue.js input框之間賦值方法具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Vue項(xiàng)目創(chuàng)建首頁(yè)發(fā)送axios請(qǐng)求的方法實(shí)例

    Vue項(xiàng)目創(chuàng)建首頁(yè)發(fā)送axios請(qǐng)求的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目創(chuàng)建首頁(yè)發(fā)送axios請(qǐng)求的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • vue3中標(biāo)簽form插件的使用教程詳解

    vue3中標(biāo)簽form插件的使用教程詳解

    這篇文章主要為大家詳細(xì)介紹了vue3中標(biāo)簽form插件的使用的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • Vue創(chuàng)建頭部組件示例代碼詳解

    Vue創(chuàng)建頭部組件示例代碼詳解

    本文通過(guò)實(shí)例代碼給大家介紹了Vue創(chuàng)建頭部組件的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-10-10
  • Vue組件Draggable實(shí)現(xiàn)拖拽功能

    Vue組件Draggable實(shí)現(xiàn)拖拽功能

    這篇文章主要為大家詳細(xì)介紹了Vue組件Draggable實(shí)現(xiàn)拖拽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • vite+vue3搭建的工程實(shí)現(xiàn)批量導(dǎo)入store的module

    vite+vue3搭建的工程實(shí)現(xiàn)批量導(dǎo)入store的module

    這篇文章主要介紹了vite+vue3搭建的工程實(shí)現(xiàn)批量導(dǎo)入store的module方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue2純前端實(shí)現(xiàn)文字流式輸出效果

    Vue2純前端實(shí)現(xiàn)文字流式輸出效果

    這篇文章主要為大家詳細(xì)介紹了Vue2純前端實(shí)現(xiàn)像chatGpt和Deepseek那樣的文字流式輸出效果的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),有需要的可以了解下
    2025-03-03
  • Vue實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車案例

    Vue實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車案例

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論

莲花县| 广德县| 夹江县| 金山区| 马鞍山市| 威信县| 武川县| 石景山区| 舟山市| 东明县| 镇江市| 迁西县| 河源市| 白河县| 营口市| 介休市| 都安| 克拉玛依市| 合江县| 略阳县| 广元市| 巴马| 登封市| 小金县| 东乌珠穆沁旗| 隆尧县| 黑河市| 萨嘎县| 花莲县| 蚌埠市| 深泽县| 白银市| 南宁市| 江口县| 海林市| 铁岭市| 旬阳县| 福鼎市| 天柱县| 凤山市| 阿克陶县|