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 翻译:赖信涛 责编:仲培艺