我在Vert.x中開發(基於Netty和Hazelcast),我試圖在兩個服務器實例之間共享數據(在不同機器中的這些實例的eache,相同的lan)。Vert.x中的羣集和共享數據
我的問題是,我不知道如何配置vert.x服務器,讓他們共享他們的併發內存映射(理論說這是可能的)。
我讀過Vert.x和Hazelcast的許多文檔,但是我還沒有找到結果。 (我不知道如何強制Vert.x加載hazelcast xml配置文件)。
在此先感謝!
我在Vert.x中開發(基於Netty和Hazelcast),我試圖在兩個服務器實例之間共享數據(在不同機器中的這些實例的eache,相同的lan)。Vert.x中的羣集和共享數據
我的問題是,我不知道如何配置vert.x服務器,讓他們共享他們的併發內存映射(理論說這是可能的)。
我讀過Vert.x和Hazelcast的許多文檔,但是我還沒有找到結果。 (我不知道如何強制Vert.x加載hazelcast xml配置文件)。
在此先感謝!
AFAIK不能共享vert.x的不同實例之間的數據 - 從文檔
「[...]這樣的用例是通過提供一種共享地圖結構較好地解決了,可以是直接由同一個vert.x實例中的不同Verticle實例訪問。「
由於「vert.x實例」的意思是「jvm實例」,所以不能在不同的jvm之間使用sharedmap/set。你可以使用這個事件總線。
如前所述,Vert.x捆綁的數據共享對象不支持跨多個Vert.x實例共享數據。爲了做到這一點,你必須做:
SharedMap
實例的Verticle,併發布和偵聽集羣其餘部分的更新。有在不同的機器共享vertx實例之間的數據
選項選項1.
您可以使用Vert.x ClusterManager,它的地圖:
ClusterManager clusterManager = ((VertxInternal)vertx).clusterManager();
Map map = clusterManager.getSyncMap("mapName"); // shared distributed map
該地圖由Hazelcast IMap支持並分發。這假定你使用0參數運行vertx並配置了集羣。
但是請注意,這是內部API,通常不推薦用於生產。如果你正在做一次實驗,那麼它可能會有用。
選項2
您可以訪問Hazelcast一次vertx在集羣模式下啓動:
Set<HazelcastInstance> instances = Hazelcast.getAllHazelcastInstances();
HazelcastInstance hz = instances.stream().findFirst().get();
Map map = hz.getMap("mapName"); // shared distributed map
選擇1並將其包裝在一個班級中。如果我們想在未來的時間裏更新vertx,我們會有一站式購物。僅供參考,目的是註冊通知以監視已關閉的節點。 – fionbio
Vert.x 2不支持集羣範圍內共享數據。但是,Vert.x 3確實公開了一個封裝了底層Hazelcast集羣管理器的異步API。
For Vert。x 2,但是,您可以直接在您的工作者Verticle中使用Hazelcast實例。只要使用Hazelcast的靜態方法來獲取Vert.x Hazelcast實例:
HazelcastInstance hazelcast = Hazelcast.getAllHazelcastInstances().iterator().next();
請注意,您應該只從一個工人verticle內直接訪問Hazelcast API以這種方式。 Hazelcast API是阻塞的,所以如果在正常的Verticle中使用,它將阻止事件循環。
使用Vert.x 3 - 如果將Vert.x實例配置爲「羣集模式」(可以像將Vertica.x啓動器的命令行中添加-cluster
一樣簡單,則可以使用see here for details),那麼您可以使用SharedData
接口可以訪問「分佈式映射」,它允許集羣成員透明地在集羣中讀取和寫入數據。
例子:
if (vertx.isClustered()) {
log.info("Using clustered data store");
vertx.sharedData().<String, MyEntity>getClusterWideMap("entities",
res -> {
AsyncMap<String, MyEntity> dataMap = res.result();
setDataStore(dataMap);
});
}
我不完全熟悉vert.x&不是使用您的陳述不同意 - 這應該使用hazelcast是可能的(圖被複制)。 –
@castarco該文檔還說:「在更高版本的vert.x中,我們的目標是擴展這個數據以允許集羣中所有vert.x實例共享數據。」所以請留意一下。 –
@CarloBertuccini有什麼方法可以在Vert.x中使用Hazelcast數據結構? –