改的onos源碼, 強類型語言, 可以跳轉。onos架構太重了。後面準備用go語言進行重構
https://gitee.com/putao0525/putao-sdn
Atomix 是一個強大的分佈式協調和一致性框架,獨立於 ONOS 也可以使用。它提供了多種分佈式數據結構和工具,可以幫助開發者實現分佈式應用。以下是一個簡單的指南,展示如何單獨使用 Atomix 來構建分佈式應用。
import io.atomix.core.Atomix;
import io.atomix.core.AtomixBuilder;
import io.atomix.cluster.Node;
import io.atomix.cluster.discovery.BootstrapDiscoveryProvider;
import io.atomix.core.profile.Profile;
import io.atomix.utils.net.Address;
public class AtomixHeartbeatExample {
public static void main(String[] args) {
// 創建 Atomix 集羣配置
AtomixBuilder builder = Atomix.builder()
.withMemberId("node1")
.withAddress(Address.from("localhost", 5678))
.withMembershipProvider(BootstrapDiscoveryProvider.builder()
.withNodes(
Node.builder()
.withId("node1")
.withAddress(Address.from("localhost", 5678))
.build(),
Node.builder()
.withId("node2")
.withAddress(Address.from("localhost", 5679))
.build(),
Node.builder()
.withId("node3")
.withAddress(Address.from("localhost", 5680))
.build())
.build())
.addProfile(Profile.dataGrid());
// 初始化 Atomix 實例
Atomix atomix = builder.build();
// 啓動 Atomix 實例
atomix.start().join();
// 監聽集羣成員變更事件
atomix.getMembershipService().addListener(event -> {
switch (event.type()) {
case MEMBER_ADDED:
System.out.println("Member added: " + event.subject().id());
break;
case MEMBER_REMOVED:
System.out.println("Member removed: " + event.subject().id());
break;
case REACHABILITY_CHANGED:
System.out.println("Member reachability changed: " + event.subject().id() +
", reachable: " + event.subject().isReachable());
break;
default:
break;
}
});
// 關閉 Atomix 實例
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
atomix.stop().join();
}));
}
}
import org.mapdb.DB;
import org.mapdb.DBMaker;
import org.mapdb.HTreeMap;
public class MapDBExample {
public static void main(String[] args) {
// 創建或打開數據庫文件
DB db = DBMaker.fileDB("example.db")
.fileMmapEnable() // 啓用內存映射文件
.transactionEnable() // 啓用事務支持
.make();
// 創建或打開哈希表
HTreeMap<String, String> map = db.hashMap("exampleMap")
.keySerializer(org.mapdb.serializer.Serializer.STRING)
.valueSerializer(org.mapdb.serializer.Serializer.STRING)
.createOrOpen();
// 存儲數據
map.put("key1", "value1");
map.put("key2", "value2");
// 檢索數據
String value1 = map.get("key1");
System.out.println("key1: " + value1);
// 刪除數據
map.remove("key2");
// 提交事務
db.commit();
// 關閉數據庫
db.close();
}
}