中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么構建多平臺的Ignite集群

發布時間:2021-12-16 16:19:45 來源:億速云 閱讀:136 作者:iii 欄目:云計算

本篇內容介紹了“怎么構建多平臺的Ignite集群”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

構建多平臺的Ignite集群:Java+.NET

Ignite集群可以由它支持的任意平臺啟動的節點組成,包括Java、.NET和C++。本文會介紹如何通過NuGet和Maven運行一個.NET/Java集群

前提條件

本文適用于對Java不熟悉的.NET開發人員,反之亦然,因此描述的會比較詳細。 本文會使用如下的軟件:

  • Visual Studio 2015(包括NuGet; 免費社區版);

  • IntelliJ IDEA (包括Maven; 免費社區版)。

目標

  • 連接Java和.NET節點;

  • 使用Java和.NET類,通過同樣的名字和字段訪問Ignite緩存中的共享數據;

  • 運行持續查詢,觀察來自另一個平臺的實時數據更新。

Java工程設置

  • 啟動IntelliJ IDEA,然后點擊“Create New Project”: 怎么構建多平臺的Ignite集群

  • 選擇Maven然后點擊“Next”: 怎么構建多平臺的Ignite集群

  • 輸入Maven信息,點擊“Next”然后“Finish”: 怎么構建多平臺的Ignite集群 怎么構建多平臺的Ignite集群

  • 完成之后,會看到新項目打開的pom.xml文件: 怎么構建多平臺的Ignite集群

  • project片段增加Ignite依賴:

<dependencies>
    <dependency>
        <groupId>org.apache.ignite</groupId>
        <artifactId>ignite-core</artifactId>
        <version>1.7.0</version>
    </dependency>
</dependencies>
  • IDEA可能會詢問是否導入項目改變,點擊任意的鏈接: 怎么構建多平臺的Ignite集群

  • 在src\main\java中添加Demo類,代碼如下:

import org.apache.ignite.Ignition;

public class Demo {
    public static void main(String[] args) {
        Ignition.start();
    }
}
  • 通過Shift+F10運行,然后在IDEA的控制臺上確認節點是否啟動:

怎么構建多平臺的Ignite集群

  • 通過Ctrl+F2或者停止按鈕終止程序。

.NET工程設置

  • 啟動Visual Studio然后點擊File -> New -> Project:

  • 選擇Visual C# -> Windows -> Console Application:

  • 確保在上邊選擇了.NET Framework版本4及以上

  • 點擊“OK”,然后就會生成一個空的控制臺工程;

  • 打開NuGet控制臺:Menu -> Tools -> NuGet Package Manager -> Package Manager Console;

  • 輸入Install-Package Apache.Ignite:

  • 點擊回車,然后就會輸出Successfully installed 'Apache.Ignite 1.7.0' to IgniteMultiPlatform這樣的消息。

  • Program.cs的內容改成如下這樣:

using System;
using Apache.Ignite.Core;
class Program
{
    static void Main(string[] args)
    {
        Ignition.Start();
        Console.ReadKey();
    }
}
  • 通過Ctrl-F5啟動程序,然后在控制臺中確認Ignite節點已經啟動:

調整Java節點的配置以發現.NET節點

現在,就可以同時在IDEA中啟動Java節點,在Visual Studio中啟動.NET節點,這時會在他們中的一個發現如下的錯誤:

IgniteSpiException: Local node's binary configuration is not equal to remote node's binary configuration [locBinaryCfg={globSerializer=null, compactFooter=true, globIdMapper=org.apache.ignite.binary.BinaryBasicIdMapper}, rmtBinaryCfg=null]

這個錯誤是說,.NET節點在BinaryConfiguration中只支持BinaryBasicIdMapperBinaryBasicNameMapper,需要在Java中顯式地進行設置,將Ignition.start();行改成如下的代碼:

BinaryConfiguration binCfg = new BinaryConfiguration();

binCfg.setIdMapper(new BinaryBasicIdMapper());
binCfg.setNameMapper(new BinaryBasicNameMapper());

IgniteConfiguration cfg = new IgniteConfiguration().setBinaryConfiguration(binCfg);

Ignition.start(cfg);

這時同時啟動Java和.NET節點,驗證他們可以發現對方:

[15:04:17] Topology snapshot [ver=2, servers=2, clients=0, CPUs=8, heap=7.1GB]

通過Ignite緩存進行數據交換

現在各個節點已經聯通,之后會在每個平臺上寫一個簡單的聊天程序來演示數據的交換。代碼非常簡單,因為API是相同的,并且語言語法也差不多。 首先,定義名字和成員完全相同的類。

Java Message類

右擊src\main\java項目文件夾然后選擇New -> Java Class,輸入Message名字,代碼如下:

public class Message {
    public Message(String author, String text) {
        this.author = author;
        this.text = text;
    }
    final String author;
    final String text;
}

.NET Message類

右擊Solution Explorer的項目節點,然后選擇Add -> Class…,輸入Message名字,代碼如下:

class Message
{
    public Message(string author, string text)
    {
        Author = author;
        Text = text;
    }
    public string Author { get; }
    public string Text { get; }
}

Basic映射器是區分大小寫的,并且會忽略命名空間(包),因此這兩個類是可以互相映射的,可以在一個平臺中將Message實例注入緩存,然后在另一個平臺中獲取。 現在開始寫聊天程序本身,邏輯比較簡單:用戶輸入一個聊天信息,然后將其注入緩存,持續查詢會收到所有的緩存更新通知并且顯示他們。

Java聊天程序

main方法的代碼改成如下:

// Retrieve user name
System.out.print("Hi, enter your name: ");
Scanner consoleScanner = new Scanner(System.in);
String name = consoleScanner.nextLine();

// Get or create cache
IgniteCache<Long, Message> cache = ignite.getOrCreateCache("chat");

// Initialize unique ID sequence
IgniteAtomicSequence messageId = ignite.atomicSequence("chatId", 0, true);

// Set up continuous query

ContinuousQuery<Long, Message> qry = new ContinuousQuery<>();

qry.setLocalListener(iterable -> {
    // This will be invoked immediately on each cache update
    for (CacheEntryEvent<? extends Long, ? extends Message> evt : iterable)
        System.out.println(evt.getValue().author + ": " + evt.getValue().text);
});

cache.query(qry);

// Run the chat loop
while (true) {
    System.out.print("> ");
    
    String msgText = consoleScanner.nextLine();
    Long msgId = messageId.incrementAndGet();
    
    cache.put(msgId, new Message(name, msgText));
}

.NET聊天程序

在Ignite.NET中有兩處不同(這些特性預計會在下一版本中實現):

  • 需要在BinaryConfiguration中注冊一個用于緩存的類型(Java會自動做這個事);

  • API中還不支持Lambda表達式,需要單獨地實現ICacheEntryEventListener<K, V>接口。

因此,創建一個單獨的類,代碼如下:

using System;
using System.Collections.Generic;
using Apache.Ignite.Core.Cache.Event;

class CacheListener : ICacheEntryEventListener<long, Message>
{
    public void OnEvent(IEnumerable<ICacheEntryEvent<long, Message>> evts)
    {
        foreach (var evt in evts)
            Console.WriteLine($"{evt.Value.Author}: {evt.Value.Text}");
    }
}

然后更新Main方法:

// Retrieve user name
Console.Write("Hi, enter your name: ");
var name = Console.ReadLine();

// Register Message type
var cfg = new IgniteConfiguration
{
    BinaryConfiguration = new BinaryConfiguration(typeof(Message))
};

// Start Ignite and retrieve cache
var ignite = Ignition.Start(cfg);
var cache = ignite.GetOrCreateCache<long, Message>("chat");

// Initialize unique ID sequence
var messageId = ignite.GetAtomicSequence("chatId", 0, true);

// Set up continuous query
cache.QueryContinuous(new ContinuousQuery<long, Message>(new CacheListener()));

// Run the chat loop
while (true)
{
    Console.Write("> ");

    var msgText = Console.ReadLine();
    var msgId = messageId.Increment();

    cache[msgId] = new Message(name, msgText);
}

“怎么構建多平臺的Ignite集群”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大名县| 汉中市| 和静县| 红河县| 祁阳县| 上蔡县| 庄浪县| 常州市| 蕉岭县| 搜索| 徐汇区| 万州区| 江西省| 南岸区| 东兴市| 雅江县| 洱源县| 德阳市| 临邑县| 宁陵县| 尤溪县| 尉氏县| 黑龙江省| 桐柏县| 浙江省| 同仁县| 永善县| 商丘市| 互助| 读书| 什邡市| 翼城县| 小金县| 塘沽区| 上思县| 太保市| 山东省| 广汉市| 吐鲁番市| 舞阳县| 平江县|