在LINQPad中使用Ignite.NET

LINQPad是進行.NET開發的一款優秀工具,很是有利於Ignite.NET API的快速入門。html

入門

  1. 下載LINQPad:linqpad.net/Download.aspx,注意要選擇64位操做系統的AnyCPU版本;git

  2. 安裝Ignite.NET的NuGet軟件包:web

    • 按F4(或點擊Query -> ReferencesProperties菜單項);
    • 點擊Add NuGet…,可能會出現警告:As you don't have LINQPad Premium/Developer Edition, you can only search for NuGet packages that include LINQPad samples.,這是正常的,由於Ignite軟件包確實包含LINQPad示例;
    • 經過單擊Add To Query按鈕來安裝軟件包;
    • 點擊Add namespaces按鈕,並(至少)添加第一個:Apache.Ignite.Core
    • 關閉NuGet窗口,在Query Properties窗口上單擊OK
  3. 確認Language下拉框設置爲C# Expression(默認設置);spring

  4. 輸入Ignition.Start(),而後按下F5。apache

Ignite節點啓動後,就能夠在輸出面板中看到一般的控制檯輸出。緩存

在左側的Samples選項卡上能夠看到打包的示例代碼。網絡

回收工做進程

LINQPad在單獨的進程中運行業務代碼,該進程默認在屢次運行之間能夠重複使用(出於性能緣由)。app

這有兩個問題:工具

  1. Ignite.NET啓動進程內JVM,該進程重用時,也會重用此JVM,所以沒法修改JVM選項;
  2. Ignition類將全部啓動的節點保留在靜態映射中,該進程重用時,這些節點將保持運行,若是執行Ignition.Start()兩次,則會拋出Default Ignite instance has already been started.這樣的錯誤。

該行爲有時可能有用,但有時則不須要,可是幸虧能夠經過內置的Util.NewProcess屬性來控制它。先將頂部的Language下拉框切換到C# Statement(s)模式,而後運行如下腳本:性能

Util.NewProcess = true;
Ignition.Start();

該腳本屢次運行也不會出問題,由於每次都是從頭開始的。

重用啓動節點

因爲JVM啓動和網絡發現的過程,Ignite節點須要一些時間才能啓動。爲了在LINQPad中對代碼快速迭代,能夠在屢次運行之間重用已啓動的節點。例以下面的代碼重用啓動的Ignite實例並重用現有的緩存,每次運行添加一條數據並顯示現有的數據:

// Get existing instance or start a new one
var ignite = Ignition.TryGetIgnite() ?? Ignition.Start();

// Get existing cache or create a new one
var cache = ignite.GetOrCreateCache<Guid, DateTime>("cache");

// Add a new entry
cache[Guid.NewGuid()] = DateTime.Now;

// Show all entries
cache.Dump();

與重啓節點須要幾秒鐘的時間相反,此代碼將在幾毫秒內運行。

必要時能夠經過Shift+Control+F5卸載AppDomain並從頭開始。

使用技巧

除了簡單講解Ignite API以外,還建議關注下下面的Ignite + LINQPad使用場景:

檢查現有的緩存

Visor命令行工具能夠顯示緩存的內容,可是在LINQPad中執行此操做更加靈活且友好,由於LINQPad腳本中沒有任何實際的類,所以必須經過二進制模式才能讀取緩存的內容。

如下代碼顯示了全部緩存的列表以及每一個緩存中的前5條數據:

var ignite = Ignition.TryGetIgnite() ?? Ignition.Start();

foreach (var cacheName in ignite.GetCacheNames())
    ignite.GetCache<object, object>(cacheName)
        .WithKeepBinary<object, object>()
        .Select(x => x.ToString())
        .Take(5)
        .Dump(cacheName);

將Spring XML配置轉換爲C# IgniteConfiguration

假設有一些Ignite Spring XML配置文件,而且須要對Ignite.NET也使用相同的配置,或者要從Ignite.NET 1.5遷移,該版本中Spring XML是惟一的配置機制。

具體上能夠簡單地使用上述Spring XML文件啓動節點,而後調用GetConfiguration()以查看其在.NET中對應的配置:

Ignition.Start(@"spring-config.xml").GetConfiguration()

將IgniteConfiguration轉換爲app.config XML

Ignite.NET支持app.config和web.config配置。可是編寫XML並不高效,而在C#中使用IgniteConfiguration則更容易一些,由於IDE會有很大的幫助,能夠避免沒法編譯的無效代碼。

爲了配合使用XML,有一種將IgniteConfiguration實例轉換爲XML表示形式的隱藏方法。如下代碼顯示瞭如何經過反射(早期版本)使用它(確認已將Language下拉菜單設置爲C#Program):

void Main()
{
    new IgniteConfiguration
    {
        CacheConfiguration = new[]
        {
            new CacheConfiguration
            {
                Name = "myCache",
                CacheMode = CacheMode.Replicated
            }
        }
    }.ToXml().Dump();
}

public static class IgniteConfigurationExtensions
{
    public static string ToXml(this IgniteConfiguration cfg)
    {
        var sb = new StringBuilder();

        var settings = new XmlWriterSettings
        {
            Indent = true
        };

        using (var xmlWriter = XmlWriter.Create(sb, settings))
        {
            typeof(Ignition).Assembly
                .GetType("Apache.Ignite.Core.Impl.Common.IgniteConfigurationXmlSerializer")
                .GetMethod("Serialize")
                .Invoke(null, new object[] {cfg, xmlWriter, "igniteConfiguration"});
        }

        return sb.ToString();
    }
}

結果是:

<?xml version="1.0" encoding="utf-16"?>
<igniteConfiguration xmlns="http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection">
  <cacheConfiguration>
    <cacheConfiguration name="myCache" cacheMode="Replicated" />
  </cacheConfiguration>
</igniteConfiguration>

結合先前的Spring XML場景,還能夠將Spring XML轉換爲app.config XML。

在最新的版本中,在開放API中還有ToXml方法,會更方便。

相關文章
相關標籤/搜索