天天看點

Apache Ignite.NET 1.7新特性

Apache Ignite.NET 1.7新特性

APache Ignite 1.7上周釋出,讓我們一起來看一下.net部分的新特性。

分布式連接配接

這是很有用的一項特性,之前,SQL隻能連接配接同位資料:如果

Join

的緩存位于節點1,而Apache的緩存位于節點2,那麼SQL連接配接不能傳回這個資料對。

但現在,這不再是問題了。Join操作能在任何情況下工作。這項特性預設并沒有開啟,你需要設定

SqlQuery.EnableDistributedJoins

SqlFieldsQuery.EnableDistributedJoins

true

來開啟。

對于LINQ,有一個新的重載。

public static IQueryable<icacheentry<k, v="">>
    AsCacheQueryable<k, v="">(this ICache<k, v=""> cache, QueryOptions queryOptions)
           

QueryOptions

類有

EnableDistributedJoins

的特性。

使用者自定義AffinityFunction

除了提前定義

FairAffinityFunction

RendezvousAffinityFunction

之外,現在也可以通過實作

IAffinityFunction

接口或者繼承任意一個已經實作的類來自定義

AffinityFunction

Apache.Ignite.exe的.Net配置

Apache.Ignite.exe獨立運作節點有兩個新的指令行參數:

ConfigFileNameand

ConfigSectionName

。可以用來從Apache.Ignite.exe.config或其他的配置檔案載入

IgniteConfigurationSection

将Java的輸出轉發到.Net終端

Ignite可以将有用的資訊輸出到終端:拓撲快照、錯誤、警告等。這些資訊可以寫到log,但是如果能輸出到終端,在開發中則更加實用。

大多數的資訊都是用Java寫的。如果你運作的是終端應用,并沒有什麼問題。然而,這對.Net來說就很麻煩了。Ignite 1.7修複了這個問題。所有終端輸出都用原生.Net元件,可以完美配合.Net工作。下面是一個LINQPad的截圖:

Apache Ignite.NET 1.7新特性

InnerException裡的Java異常資訊

另一項和debug有關的優化是

InnerException

的Java異常細節。

在1.6中,如果Java層發生了異常,你在.Net中得到的隻是一些基本的異常資訊。這并不足夠我們了解問題。例如,如果你有配置錯誤,得到的異常資訊隻有模糊的

Failed to start manager: GridManagerAdapter

文本。而現在,所有的跟蹤資訊如下所示:

Ignition.Start(new IgniteConfiguration
{
    CommunicationSpi = new TcpCommunicationSpi
    {
        // Negative timeout is not valid
        IdleConnectionTimeout = TimeSpan.MinValue
    }
});
           
Apache.Ignite.Core.Common.IgniteException: Failed to start manager: GridManagerAdapter
   [enabled=true, name=org.apache.ignite.internal.managers.communication.GridIoManager]
---> Apache.Ignite.Core.Common.JavaException: class org.apache.ignite.IgniteException: 
Failed to start manager: GridManagerAdapter [enabled=true, name=org.apache.ignite.internal.managers.communication.GridIoManager]
  at org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:908)
  at org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java:48)
  at org.apache.ignite.internal.processors.platform.PlatformIgnition.start(PlatformIgnition.java:76)
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to start manager: GridManagerAdapter [enabled=true, name=org.apache.ignite.internal.managers.communication.GridIoManager]
  at org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1576)
  at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:846)
  at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1739)
  at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1589)
  at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1042)
  at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:549)
  at org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java:43)
  ... 1 more
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to get SPI attributes.
  at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:248)
  at org.apache.ignite.internal.managers.communication.GridIoManager.start(GridIoManager.java:258)
  at org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1571)
  ... 7 more
Caused by: class org.apache.ignite.spi.IgniteSpiException: SPI parameter failed condition check: idleConnTimeout > 0
  at org.apache.ignite.spi.IgniteSpiAdapter.assertParameter(IgniteSpiAdapter.java:344)
  at org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi.getNodeAttributes(TcpCommunicationSpi.java:1419)
  at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:231)
  ... 9 more
           

通過跟蹤資訊,我們可以發現,是

idleConnTimeout > 0

檢查失敗了。

配置Schema NuGet包

IgniteConfigurationSection.xsd現在在一個NuGet包中,将一個合适的版本加入到你的項目中非常簡單。

Install-Package Apache.Ignite.Schema
           

将這個檔案加入到項目中的時候,在Visual Studio的app.config或web.config中編輯IgniteConfigurationSection的時候,可以支援Intellisense(TM)。

Apache Ignite.NET 1.7新特性
Apache Ignite.NET 1.7新特性

ASP.NET Output Cache提供者

可以使用Ignite的分布式緩存為ASP.NET輸出緩存。更多資訊可以檢視ASP.NET Output Caching。

原文:What’s New in Apache Ignite.NET 1.7

作者:Pavel Tupitsyn 翻譯:賴信濤 責編:仲培藝