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的截圖:
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)。
ASP.NET Output Cache提供者
可以使用Ignite的分布式緩存為ASP.NET輸出緩存。更多資訊可以檢視ASP.NET Output Caching。
原文:What’s New in Apache Ignite.NET 1.7
作者:Pavel Tupitsyn 翻譯:賴信濤 責編:仲培藝