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
的特性。
除了提前定义 FairAffinityFunction
和 RendezvousAffinityFunction
之外,现在也可以通过实现 IAffinityFunction
接口或者继承任意一个已经实现的类来自定义 AffinityFunction
。
Apache.Ignite.exe独立运行节点有两个新的命令行参数: ConfigFileNameand
和 ConfigSectionName
。可以用来从Apache.Ignite.exe.config或其他的配置文件载入 IgniteConfigurationSection
。
Ignite可以将有用的信息输出到终端:拓扑快照、错误、警告等。这些信息可以写到log,但是如果能输出到终端,在开发中则更加实用。
大多数的信息都是用Java写的。如果你运行的是终端应用,并没有什么问题。然而,这对.Net来说就很麻烦了。Ignite 1.7修复了这个问题。所有终端输出都用原生.Net组件,可以完美配合.Net工作。下面是一个LINQPad的截图:
另一项和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
检查失败了。
IgniteConfigurationSection.xsd现在在一个NuGet包中,将一个合适的版本加入到你的项目中非常简单。
Install-Package Apache.Ignite.Schema
将这个文件加入到项目中的时候,在Visual Studio的app.config或web.config中编辑IgniteConfigurationSection的时候,可以支持Intellisense(TM)。
可以使用Ignite的分布式缓存为ASP.NET输出缓存。更多信息可以查看 ASP.NET Output Caching 。
原文: What’s New in Apache Ignite.NET 1.7
作者:Pavel Tupitsyn 翻译 :赖信涛 责编 :仲培艺