Apache geode 缓存侦听器未执行
Apache geode cachelistener not executing
这是一个新手问题,感谢阅读。所以我用这样的复制区域启动 Geode 服务器缓存进程:
gfsh>start locator --name=myLocator
和一个服务器进程
start server --cache-xml-file=D:\Geode\config\cache.xml --name=myGeode --locators=localhost[10334]
cache.xml 定义了一个名为 myRegion
的复制区域
<?xml version="1.0" encoding="UTF-8"?>
<cache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://geode.apache.org/schema/cache"
xsi:schemaLocation="http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd"
version="1.0">
<cache-server/>
<region name="myRegion" refid="REPLICATE"/>
</cache>
然后我使用 Pivotal Native Client for .Net,在另一个进程中,我使用缓存事件侦听器启动客户端缓存,如下所示:
CacheFactory cacheFactory = CacheFactory.CreateCacheFactory();
Cache cache = cacheFactory.SetSubscriptionEnabled(true).Create();
RegionFactory regionFactory = cache.CreateRegionFactory(RegionShortcut.CACHING_PROXY);
IRegion<string, string> region = regionFactory.Create<string, string>("myRegion");
region.AttributesMutator.SetCacheListener(new MyEventHandler<string, string>());
MyEventHandler 是:
public class MyEventHandler<TKey, TVal> : ICacheListener<TKey, TVal>
{
public void AfterCreate(EntryEvent<TKey, TVal> ev)
{
Console.WriteLine("Received AfterCreate event for: {0}", ev.Key.ToString());
}
...
}
然后在第三个进程中我再次为该进程创建另一个缓存以将一些数据放入 myRegion
。它与没有侦听器的第二个进程的设置相同:
CacheFactory cacheFactory = CacheFactory.CreateCacheFactory();
Cache cache = cacheFactory.SetSubscriptionEnabled(true).Create();
RegionFactory regionFactory = cache.CreateRegionFactory(RegionShortcut.CACHING_PROXY);
IRegion<string, string> region = regionFactory.Create<string, string>("myRegion");
region["testKey"] = "testValue";
问题是在第三个进程将测试数据放入 myRegion
之后(我可以在服务器上看到,所以它正在运行)第二个进程中的侦听器看不到它。我错过了什么?
谢谢...
在有侦听器的客户端上,您需要 register interest in either all or a subset of key 以便服务器知道向客户端发送更新。
这是一个新手问题,感谢阅读。所以我用这样的复制区域启动 Geode 服务器缓存进程:
gfsh>start locator --name=myLocator
和一个服务器进程
start server --cache-xml-file=D:\Geode\config\cache.xml --name=myGeode --locators=localhost[10334]
cache.xml 定义了一个名为 myRegion
<?xml version="1.0" encoding="UTF-8"?>
<cache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://geode.apache.org/schema/cache"
xsi:schemaLocation="http://geode.apache.org/schema/cache http://geode.apache.org/schema/cache/cache-1.0.xsd"
version="1.0">
<cache-server/>
<region name="myRegion" refid="REPLICATE"/>
</cache>
然后我使用 Pivotal Native Client for .Net,在另一个进程中,我使用缓存事件侦听器启动客户端缓存,如下所示:
CacheFactory cacheFactory = CacheFactory.CreateCacheFactory();
Cache cache = cacheFactory.SetSubscriptionEnabled(true).Create();
RegionFactory regionFactory = cache.CreateRegionFactory(RegionShortcut.CACHING_PROXY);
IRegion<string, string> region = regionFactory.Create<string, string>("myRegion");
region.AttributesMutator.SetCacheListener(new MyEventHandler<string, string>());
MyEventHandler 是:
public class MyEventHandler<TKey, TVal> : ICacheListener<TKey, TVal>
{
public void AfterCreate(EntryEvent<TKey, TVal> ev)
{
Console.WriteLine("Received AfterCreate event for: {0}", ev.Key.ToString());
}
...
}
然后在第三个进程中我再次为该进程创建另一个缓存以将一些数据放入 myRegion
。它与没有侦听器的第二个进程的设置相同:
CacheFactory cacheFactory = CacheFactory.CreateCacheFactory();
Cache cache = cacheFactory.SetSubscriptionEnabled(true).Create();
RegionFactory regionFactory = cache.CreateRegionFactory(RegionShortcut.CACHING_PROXY);
IRegion<string, string> region = regionFactory.Create<string, string>("myRegion");
region["testKey"] = "testValue";
问题是在第三个进程将测试数据放入 myRegion
之后(我可以在服务器上看到,所以它正在运行)第二个进程中的侦听器看不到它。我错过了什么?
谢谢...
在有侦听器的客户端上,您需要 register interest in either all or a subset of key 以便服务器知道向客户端发送更新。