日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Vert.x中EventBus中的使用

發布時間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vert.x中EventBus中的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


注意:使用的是vert.x3.0 僅支持到java8當中有一些lambda表達式。如不明確請自補java8新特性。

The Event Bus

event bus 是vert.x的神經系統。

每個vert.x的實例都有一個單一的event bus 實例。它是使用vertx.eventBus()方法獲得的。

event bus 同意程序中的不同語言編寫的模塊進行通信。不論他們是同樣的vert.x實例。還是不同的vert.x實例。

它甚至能夠橋接瀏覽器中執行的Javascript通信。

event bus能夠在分布式系統中的多個server節點之間進行點對點通信和多個瀏覽器。

event bus支持公布/訂閱模式。點對點模式,和請求/響應模式。

event bus的API是很easy的。它主要包含注冊消息處理事件。取消處理事件。發送和公布消息。

首先理論

尋址

event bus上的消息被發送到一個地址。

vert.x不包括不論什么花哨的尋址方案。

在vert.x中,一個地址就是一個簡單的String字符串。不論什么字符串都是有效的。只是最好的方法是使用某種有計劃或者有規則的方案,比方使用一個私有的空間名稱。

一些有參考價值的樣例:europe.news.feed1, acme.games.pacman, sausages, and X。

事件-消息的處理程序

收到消息的處理程序,你在一個地址上注冊一個處理程序,來消息后將觸發這個處理程序。

同一個消息處理程序能夠注冊到不同的地址上,相同同一個地址也能注冊多個處理程序。

公布/訂閱模式

event bus 支持公布消息

消息被公布到一個地址。公布意味著將消息交給全部訂閱并注冊處理程序的地址來處理。

這跟大家熟悉的公布/訂閱模式沒有什么不同。

點對點和請求/響應模式

event bus 支持點對點消息傳遞。

消息被發送到一個地址。

vert.x將發送它到一個注冊消息處理程序的地址。

假設有多個處理程序注冊地址,vert.x將選擇一個來處理(採用非嚴格循環算法)。

強烈不推薦。

當接收到消息的程序處理完畢后,能夠決定是否回復。發送程序接到回復后也能夠進行響應回復,假設他們這樣做應答處理程序將被調用。

當接收方到返回發送方。這樣能夠無限反復,這又是一種常見的消息傳遞模式:請求/響應模式

最優傳輸

vert.x可以做到最優傳輸。不會有意識的丟失消息。這是很重要的。

然而,event bus的部分或所有失敗還是有可能造成消息丟失的。

假設你的應用程序很在乎消息的完整性和時序性。那么你的代碼處理應該是冪等的。以便在消息處理程序復蘇后又一次發送消息。

消息類型

開箱同意vert.x使用不論什么的原始/簡單類型,字符串或者緩沖區發送消息。

然而這里有一個不成文的規定或者說建議。那就是最好使用JSON格式的子串來進行消息的傳遞。

JSON字串在全部的編程語言中都是很easy創建。讀取和解析的。在vert.x下它已經變成一種通用語言了。

假設你不是必需使用JSON或者說你不想。

event bus 很靈活。

它還支持發送隨意對象。還能夠定義您想要發送的對象的編解碼器。

EVENT BUS 的API

讓我們跳進event bus的API。

獲得event bus 的對象

你能夠通過例如以下代碼獲得event bus的單一對象:

EventBus eb = vertx.eventBus();

注冊處理事件

使用以下這個簡單方法注冊一個消費處理程序:

EventBus eb = vertx.eventBus();

eb.consumer("news.uk.sport", message -> {

System.out.println("I have received a message: " + message.body());

});

當一個消息到達你的處理事件是。你的事件將被激活。并處理這個消息。

consumer()方法返回一個MessageConsumer的對象實例。這個對象隨后用于注銷處理程序,或者用處理程序作為流。

然而您也能夠使用consumer()返回MessageConsumer沒有處理程序,然后單獨設置處理程序。比如:

EventBus eb = vertx.eventBus();

MessageConsumer<String> consumer = eb.consumer("news.uk.sport");consumer.handler(message -> {

System.out.println("I have received a message: " + message.body());

});

當在集群事件總線上注冊一個處理程序時,它能夠花一些時間登記到集群的全部節點上。

假設你希望在注冊完畢時得到通知的話,你能夠在MessageConsumer上注冊一個注冊完畢的處理程序:

consumer.completionHandler(res -> {

if (res.succeeded()) {

System.out.println("The handler registration has reached all nodes");

} else {

System.out.println("Registration failed!");

}

});

注銷處理事件

去除處理事件。叫做注銷。

假設你是集群事件總線, 假設你想當這個過程完畢時通知注銷,你能夠使用以下的方法:

consumer.unregister(res -> {

if (res.succeeded()) {

System.out.println("The handler un-registration has reached all nodes");

} else {

System.out.println("Un-registration failed!");

}

});

公布消息

公布消息很easy。僅僅須要把它公布到指定地址就可以:

eventBus.publish("news.uk.sport", "Yay! Someone kicked a ball");

這一消息將被交付全部訂閱news.uk.sport地址處理。

發送消息

發送消息將導致僅僅有一個注冊地址的處理程序接收到消息(多個注冊地址也僅僅有一個能收到)。

這就是點對點模式,選擇處理程序的方法採用非嚴格循環方式。

你可用用send()方法發送一條消息。

eventBus.send("news.uk.sport", "Yay! Someone kicked a ball");

未解決的指令包含在<stdiin>-include::override/eventbus_headers.adoc[] ==== The Message object

你的消息處理程序收到的是一個Message。

消息的body相應著是應該發送還是應該公布。

消息的headers是可用的。

回復消息

有時你發送消息后希望得到接收到消息的人的回復。

這就須要你使用請求-響應模式。

要做到這一點,在消息發送的時候,你能夠指定一個回復事件。

當你接收到消息的時候,你能夠通過調用reply()方法來應答。

當這一切發生的時候它會導致一個答復發送回發送方,發送方收到應答消息再做處理。

接收方:

MessageConsumer<String> consumer = eventBus.consumer("news.uk.sport");

consumer.handler(message -> {

System.out.println("I have received a message: " + message.body());

message.reply("how interesting!");

});

發送方:

eventBus.send("news.uk.sport", "Yay! Someone kicked a ball across a patch of grass", ar -> {

if (ar.succeeded()) {

System.out.println("Received reply: " + ar.result().body()); } });

相應答也能夠做應答。這樣你就能夠在兩個不同的程序中創建一個包括多個回合的對話。

發送超時

當你發送消息時和指定應答事件時你能夠通過DeliveryOptions指定超時時間。

假設應答事件不少于超時時間,這個應答事件將失敗。

默認的超時時間是30S。

發送失敗

消息發送失敗的其它原因,包含:

沒有可用的事件去發送消息

接收者已經明白使用失敗:失敗的消息

在全部情況下。應答事件將回復特定的失敗。

未解決的指令包括在<stdin> - include::override/eventbus.adoc[]==== Clustered Event Bus

event bus 不只存在于一個單一的Vert.x實例中,在一個集群中不同的Vert.x實例也能夠形成一個單一的,分布的事件總線。

集群編程

假設你創建一個Vert.x實例用于集群編程。你須要的得到一個關于集群事件總線配置

VertxOptions options = new VertxOptions();

Vertx.clusteredVertx(options, res -> {

if (res.succeeded()) {

Vertx vertx = res.result();

EventBus eventBus = vertx.eventBus();

System.out.println("We now have a clustered event bus: " + eventBus);

} else {

System.out.println("Failed: " + res.cause());

}});

你應該確保在你的類路徑中實現了一個ClusterManager,比如默認的:HazelcastClusterManager。

使用命令集群

你能夠使用命令行執行集群:vertx run my-verticle.js -cluster

Automatic clean-up in verticles

If you’re registering event bus handlers from inside verticles, those handlers will be automatically unregisteredwhen the verticle is undeployed.




總結

以上是生活随笔為你收集整理的Vert.x中EventBus中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人妻无码久久一区二区三区免费 | 日韩av中文字幕在线 | 免费萌白酱国产一区二区三区 | 日韩电影在线观看一区 | 人妻少妇偷人精品无码 | 亚洲一区免费在线观看 | 欧美亚洲一级片 | 亚洲视频一区 | 成人精品一区二区三区在线 | 福利一区在线观看 | 亚洲色图综合 | 蜜桃久久一区二区三区 | 欧美色图在线观看 | 日韩一区二区三区四区五区六区 | 日韩中文字幕在线视频 | 资源av| 久久久久麻豆 | 人妻激情偷乱频一区二区三区 | 国产福利小视频 | 免费av大全 | 黑人操少妇 | 免费国产黄色网址 | av直播在线观看 | 美女色av| 成人区人妻精品一熟女 | 爱福利视频网 | 欧美超碰在线观看 | 亚洲爱爱片 | 4438亚洲| 国产精品一区二区毛片 | 波多野结衣中文字幕一区二区 | 精品国产二区三区 | 久久国产热视频 | 91av亚洲| 亚洲成年 | 天天舔天天干 | 国产免费一区二区三区最新不卡 | 九九热在线精品 | 玖玖精品国产 | 国产精品亚洲一区二区无码 | 欧美日韩精品一区二区 | 就爱啪啪网 | 色呦呦在线看 | 亚洲骚片 | 亚洲天堂日韩av | 欧美日韩一区二区三区 | 自拍偷拍小视频 | 五月激情在线观看 | 色吊丝中文字幕 | 熟女人妇 成熟妇女系列视频 | 男人和女人在床的app | 好男人www日本| 岛国精品一区二区 | 九九热这里有精品视频 | 男人日女人在线观看 | 欧美日韩视频在线观看免费 | 中文 欧美 日韩 | 亚洲精品乱码久久久久久麻豆不卡 | 亚洲精品在线免费看 | 欧美一级片在线观看 | 又欲又污又肉又黄短文 | 精品视频一二三区 | 国产精品热久久 | 伊人久久伊人 | 国产嫩bbwbbw高潮 | 欧美日韩一区二区区别是什么 | 欧美一a一片一级一片 | 亚洲精品视频久久久 | 激情小说亚洲图片 | 国产女人18毛片水18精品 | 97超碰网 | 国产成人自拍一区 | 亚洲性夜 | 欧美一级乱黄 | 久久这里只有精品9 | 真实偷拍激情啪啪对白 | www.国产成人 | 爽爽爽av | 视频日韩| www.黄在线观看 | 男生操女生动漫 | 日韩tv | 欧美精品一区二区三区四区 | 亚洲字幕在线观看 | 精品一区二区精品 | 久久久成人av | 韩国一区二区三区在线观看 | 深夜啪啪| 欧美男同又粗又长又大 | 涩涩999| 清冷学长被爆c躁到高潮失禁 | 日日操日日干 | 国产在线观看免费 | 夜色在线影院 | 国产欧美一区二区三区精品酒店 | 色香影院 | 东南亚毛片 | 国产精品视频一区二区在线观看 | 亲子乱子伦xxxx |