簡體   English   中英

問題創建區域並將區域持久化到磁盤 Geode Gemfire Spring 引導

[英]Problem creating region and persist region to disk Geode Gemfire Spring Boot

我觀看了 Springone Platform 和 John Blum 作為演講者的視頻,並對 Geode/Gemfire 設置感興趣,但使用Spring Data for Apache Geode Reference Guide中所述的設置

所以我使用 Eclipse 制作 spring 引導 geode 客戶端、定位器和緩存服務器,並且在以下情況下遇到問題:

  1. 啟動 spring 定位器,啟動緩存服務器,並使用 restcontroller 啟動客戶端,這樣我就可以發布我的 POJO TitleContent 並獲取我的 TitleContent 列表。 客戶端給我異常原因: org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://localhost:7070/gemfire/v1/regions": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused) org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://localhost:7070/gemfire/v1/regions": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)

完整的日志:

2019-10-29 09:54:12.461 ERROR 58556 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.context.ApplicationContextException: Failed to start bean 'gemfireClusterSchemaObjectInitializer'; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://localhost:7070/gemfire/v1/regions": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:185) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:894) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at network.powerhouse.commercehost.CommerceHostGeodeApplication.main(CommerceHostGeodeApplication.java:51) [classes/:na]
Caused by: org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://localhost:7070/gemfire/v1/regions": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:751) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:644) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.data.gemfire.config.admin.remote.RestHttpGemfireAdminTemplate.createRegion(RestHttpGemfireAdminTemplate.java:267) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.data.gemfire.config.schema.definitions.RegionDefinition.create(RegionDefinition.java:125) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.data.gemfire.config.annotation.ClusterConfigurationConfiguration$ClusterSchemaObjectInitializer.lambda$null$0(ClusterConfigurationConfiguration.java:403) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at java.base/java.util.Optional.ifPresent(Optional.java:172) ~[na:na]
    at org.springframework.data.gemfire.config.annotation.ClusterConfigurationConfiguration$ClusterSchemaObjectInitializer.lambda$start$1(ClusterConfigurationConfiguration.java:402) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[na:na]
    at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
    at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[na:na]
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) ~[na:na]
    at org.springframework.data.gemfire.config.annotation.ClusterConfigurationConfiguration$ClusterSchemaObjectInitializer.start(ClusterConfigurationConfiguration.java:402) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    ... 14 common frames omitted
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400) ~[na:na]
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243) ~[na:na]
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225) ~[na:na]
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402) ~[na:na]
    at java.base/java.net.Socket.connect(Socket.java:591) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:657) ~[na:na]
    at java.base/sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:174) ~[na:na]
    at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182) ~[na:na]
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474) ~[na:na]
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569) ~[na:na]
    at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:265) ~[na:na]
    at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372) ~[na:na]
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) ~[na:na]
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1181) ~[na:na]
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1075) ~[na:na]
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) ~[na:na]
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163) ~[na:na]
    at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:742) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    ... 31 common frames omitted
  1. 我注釋了@EnableClusterConfiguration(useHttp=true) 並再次啟動客戶端,現在可以運行了。 現在我嘗試將 POJO 帖子發送到我的 restcontroller 並得到這個異常:

    2019-10-29 09:43:08.193 ERROR 57276 --- [io-15050-exec-1] oac.c.C.[.[.[/].[dispatcherServlet]: Servlet.service() for servlet [帶有路徑 [] 的上下文中的 dispatcherServlet] 引發異常 [請求處理失敗; 嵌套異常是 org.springframework.dao.DataAccessResourceFailureException: remote server on 192.168.100.8(SpringBasedCacheClientApplication:57276:loner):64494:51246215:SpringBasedCacheClientApplication: :執行遠程放置時; 嵌套異常是 org.apache.geode.cache.client.ServerOperationException: remote server on 192.168.100.8(SpringBasedCacheClientApplication:57276:loner):64494:51246215:SpringBasedCacheClientApplication: : While perform a remote put] with root cause

    org.apache.geode.cache.RegionDestroyedException: 服務器連接來自 [identity(192.168.100.8(SpringBasedCacheClientApplication:57276:loner):64494:51246215:SpringBasedCacheClientApplication,connection=1; port=64498] 期間找不到區域命名/TitleContent put request at org.apache.geode.internal.cache.tier.sockets.BaseCommand.writeRegionDestroyedEx(BaseCommand.java:624) ~[geode-core-1.9.1.jar:na] at org.apache.geode.internal. cache.tier.sockets.command.Put65.cmdExecute(Put65.java:185) ~[geode-core-1.9.1.jar:na] at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute (BaseCommand.java:183)~[geode-core-1.9.1.Z68995FCBF432492D15 484D04A9D2AC40Z:na] at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMessage(ServerConnection.java:851) ~[geode-core-1.9.1.jar:na] at org.apache.geode. internal.cache.tier.sockets.OriginalServerConnection.doOneMessage(OriginalServerConnection.java:75) ~[geode-core-1.9.1.jar:na] at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run (ServerConnection.java:1227) ~[geode-core-1.9.1.jar:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) ~[na:na] at java .base/java.util.concurrent。 ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.lambda$initializeServerConnectionThreadPool$3(AcceptorImpl.java:616) ~[geode- core-1.9.1.jar:na] at org.apache.geode.internal.logging.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:121) ~[geode-core-1.9.1.jar:na] at java .base/java.lang.Thread.run(Thread.java:844) [na:na]

  2. 這次我取消注釋 //@EnableClusterConfiguration(useHttp=true) 但我刪除了 useHttp 並只使用 @EnableClusterConfiguration,(因此我懷疑錯誤)。 我停止 Spring 客戶端並重新啟動它。 現在它失敗了,並說:org.apache.geode.cache.RegionExistsException: /TitleContent。

完整的日志:

Application run failed

org.springframework.context.ApplicationContextException: Failed to start bean 'gemfireClusterSchemaObjectInitializer'; nested exception is org.apache.geode.cache.execute.FunctionException: org.apache.geode.cache.RegionExistsException: /TitleContent
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:185) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:894) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553) ~[spring-context-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at network.powerhouse.commercehost.CommerceHostGeodeApplication.main(CommerceHostGeodeApplication.java:51) [classes/:na]
Caused by: org.apache.geode.cache.execute.FunctionException: org.apache.geode.cache.RegionExistsException: /TitleContent
    at org.apache.geode.internal.cache.tier.sockets.command.ExecuteFunction66.cmdExecute(ExecuteFunction66.java:262) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.tier.sockets.command.ExecuteFunction70.cmdExecute(ExecuteFunction70.java:66) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:183) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMessage(ServerConnection.java:851) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.tier.sockets.OriginalServerConnection.doOneMessage(OriginalServerConnection.java:75) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1227) ~[geode-core-1.9.1.jar:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
    at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.lambda$initializeServerConnectionThreadPool$3(AcceptorImpl.java:616) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.logging.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:121) ~[geode-core-1.9.1.jar:na]
    at java.base/java.lang.Thread.run(Thread.java:844) ~[na:na]
Caused by: org.apache.geode.cache.RegionExistsException: /TitleContent
    at org.apache.geode.internal.cache.GemFireCacheImpl.createVMRegion(GemFireCacheImpl.java:2983) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.GemFireCacheImpl.basicCreateRegion(GemFireCacheImpl.java:2938) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.GemFireCacheImpl.createRegion(GemFireCacheImpl.java:2925) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.cache.RegionFactory.create(RegionFactory.java:755) ~[geode-core-1.9.1.jar:na]
    at org.springframework.data.gemfire.config.admin.functions.CreateRegionFunction.createRegion(CreateRegionFunction.java:51) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
    at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:279) ~[spring-core-5.2.0.RELEASE.jar:5.2.0.RELEASE]
    at org.springframework.data.gemfire.function.PojoFunctionWrapper.invokeTargetMethod(PojoFunctionWrapper.java:176) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.springframework.data.gemfire.function.PojoFunctionWrapper.execute(PojoFunctionWrapper.java:155) ~[spring-data-geode-2.2.0.RELEASE.jar:2.2.0.RELEASE]
    at org.apache.geode.internal.cache.tier.sockets.command.ExecuteFunction66.executeFunctionLocally(ExecuteFunction66.java:320) ~[geode-core-1.9.1.jar:na]
    at org.apache.geode.internal.cache.tier.sockets.command.ExecuteFunction66.cmdExecute(ExecuteFunction66.java:250) ~[geode-core-1.9.1.jar:na]
    ... 10 common frames omitted
  1. 這次我再次備注 //@EnableClusterConfiguration 並再次啟動 Spring Client。 這次它運行了,我再次嘗試使用相同的 POJO。 它成功了!

完整的日志:

Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-10-29 10:04:04.477  INFO 59413 --- [io-15050-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-10-29 10:04:04.483  INFO 59413 --- [io-15050-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms
2019-10-29 10:04:04.598  INFO 59413 --- [io-15050-exec-1] o.a.geode.pdx.internal.TypeRegistry      : Caching PdxType[dsid=0, typenum=12150516
        name=network.powerhouse.commercehost.model.TitleContent
        fields=[
        id:Object:identity:0:idx0(relativeOffset)=0:idx1(vlfOffsetIndex)=-1
        code:String:1:1:idx0(relativeOffset)=0:idx1(vlfOffsetIndex)=1
        title:String:2:2:idx0(relativeOffset)=0:idx1(vlfOffsetIndex)=2
        content:String:3:3:idx0(relativeOffset)=0:idx1(vlfOffsetIndex)=3]]
  1. 我嘗試在 controller 端點使用 GET rest 成功獲取 TitleContent 列表。

  2. 現在我關閉所有這些並重新啟動它們。 我嘗試獲取第 5 點中的列表,並在完整日志中給我例外:

    Servlet.service() 用於路徑 [] 上下文中的 servlet [dispatcherServlet] 引發異常 [請求處理失敗; 嵌套異常是 org.springframework.dao.DataAccessResourceFailureException: remote server on 192.168.100.8(SpringBasedCacheClientApplication:59853:loner):49745:69bf7c15:SpringBasedCacheClientApplication: 執行遠程查詢時; 嵌套異常是 org.apache.geode.cache.client.ServerOperationException: remote server on 192.168.100.8(SpringBasedCacheClientApplication:59853:loner):49745:69bf7c15:SpringBasedCacheClientApplication: While perform a remote query] with root cause

    org.apache.geode.cache.query.RegionNotFoundException: Region not found: /TitleContent at org.apache.geode.cache.query.internal.DefaultQuery.checkQueryOnPR(DefaultQuery.java:464) ~[geode-core-1.9.1 .jar:na] at org.apache.geode.cache.query.internal.DefaultQuery.execute(DefaultQuery.java:226) ~[geode-core-1.9.1.jar:na] at org.apache.geode.internal .cache.tier.sockets.BaseCommandQuery.processQueryUsingParams(BaseCommandQuery.java:120) ~[geode-core-1.9.1.jar:na] at org.apache.geode.internal.cache.tier.sockets.command.Query651. cmdExecute(Query651.java:135) ~[geode-core-1.9.1.Z68995FCBF432492D15 484D04A9D2AC40Z:na] at org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:183) ~[geode-core-1.9.1.jar:na] at org.apache.geode. internal.cache.tier.sockets.ServerConnection.doNormalMessage(ServerConnection.java:851) ~[geode-core-1.9.1.jar:na] at org.apache.geode.internal.cache.tier.sockets.OriginalServerConnection.doOneMessage (OriginalServerConnection.java:75) ~[geode-core-1.9.1.jar:na] at org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1227) ~[geode-核心-1.9.1.Z68995FCBF432492D15484D04A9D2AC4 0Z:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. java:635) ~[na:na] at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.lambda$initializeServerConnectionThreadPool$3(AcceptorImpl.java:616) ~[geode-core-1.9.1.jar: na] at org.apache.geode.internal.logging.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:121) ~[geode-core-1.9.1.jar:na] at java.base/java.lang.Thread .run(Thread.java:844) [na:na]

該區域看起來不像持久化到磁盤。

問題:

在第 3 點拋出異常,但肯定創建了 TitleContent 區域。 但是為什么會拋出異常?

有人可以指出我錯過了什么,為什么@EnableClusterConfiguration 在我的情況下表現異常以及為什么 Region 沒有持久化到磁盤(根據參考手冊,它應該由 DEFAULT DiskStore 在 7.12.7 參考手冊中持久化到磁盤)。 對於這么長的問題,我很抱歉。 我只是不能讓它更短。

謝謝你,如果有人可以提供幫助,我真的很感激。

完整的源代碼列表:

服務器:

@SpringBootApplication
@CacheServerApplication(locators="localhost[10334]", name="GeodeServerApplication" )
@EnableCacheServer(name="neptunus", autoStartup=true, hostnameForClients = "localhost", port = 48484)
//@EnableCachingDefinedRegions
//@EnableGemfireCaching
@EnablePdx
@EnableManager
@EnableHttpService
public class GeodeServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(GeodeServerApplication.class, args);
    }

} 

定位器:

@SpringBootApplication
@LocatorApplication(port = 10334)
public class GeodeLocatorApplication {

    public static void main(String[] args) {
        SpringApplication.run(GeodeLocatorApplication.class, args);
    }

}

客戶:

@SpringBootApplication
@ClientCacheApplication(logLevel = "debug", locators = {@Locator(host = "localhost", port = 10334)})
@EnablePool(name="neptunusPool", servers=@Server(host="localhost", port=48484))
@EnableGemfireRepositories(basePackageClasses= {network.powerhouse.commercehost.repository.TitleContentRepository.class})
@EnableEntityDefinedRegions(basePackageClasses= {
        network.powerhouse.commercehost.model.TitleContent.class
})
@ReplicateRegion
@EnableClusterDefinedRegions
@EnableCachingDefinedRegions
@EnableGemfireCaching
@EnableIndexing
//@EnableClusterConfiguration
@EnablePdx
public class CommerceHostGeodeApplication {

    public static void main(String[] args) {

        SpringApplication.run(CommerceHostGeodeApplication.class, args);

    }

}

客戶 CONTROLLER:

@RestController
public class TitleContentController {

    @Autowired
    TitleContentService service;

    @PostMapping("/titlecontent")
    TitleContent postTitleContent(@RequestBody TitleContent titleContent) {

        return service.save(titleContent);
    }

    @GetMapping("titlecontent")
    List<TitleContent> getTitleContentByCode(@RequestParam("code") String code){

        return service.findByCode(code);

    }
}

客戶資料庫:

@Region("TitleContent")
public interface TitleContentRepository extends CrudRepository<TitleContent, Long> {

    @Trace
    List<TitleContent> findByCode(String code);

}

客戶服務:

public interface TitleContentServiceInterface {

    public TitleContent save(TitleContent titleContent);
    public void delete(TitleContent titleContent);
    public TitleContent findById(Long id);
    List<TitleContent> findByCode(String code);

}

@Service
public class TitleContentService implements TitleContentServiceInterface{

    @Autowired
    TitleContentRepository repo;


    @Override
    public TitleContent save(TitleContent titleContent) {

        return repo.save(titleContent);
    }

    @Override
    public void delete(TitleContent titleContent) {
        repo.delete(titleContent);

    }

    @Override
    public TitleContent findById(Long id) {
        return repo.findById(id).get();
    }

    @Override
    public List<TitleContent> findByCode(String code) {
        return repo.findByCode(code);
    }

}

POJO:

@Region("TitleContent")
public class TitleContent {

    @Id
    private Long id;
    @Indexed
    private String code;
    private String title;
    private String content;
    public TitleContent(Long id, String code, String title, String content) {
        super();
        this.id = id;
        this.code = code;
        this.title = title;
        this.content = content;
    }
    public TitleContent() {
        super();
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    @Override
    public String toString() {
        return "TitleContent [id=" + id + ", code=" + code + ", title=" + title + ", content=" + content + "]";
    }



}

依賴項:

<dependency>
            <groupId>org.springframework.geode</groupId>
            <artifactId>spring-geode-starter</artifactId>
            <version>1.2.0.RELEASE</version>
        </dependency>

SPRING 引導版本:

<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>

在從SpringData Gemfire DiskStore多次閱讀 John Blum 的回答后,我終於找到了解決方法。

在我的情況下,我絕對不能使用@EnableClusterConfiguration(仍然想知道為什么)。 根據 John 的說法,我們能夠使用 gfsh 創建 Region。 由此我想到在 Spring Boot CacheServer 上做同樣的事情。 那么,如果我在 CacheServer 定義我的 POJO 並讓注釋 @EnableEntityDefinedRegions 完成在 CacheServer 端創建區域的工作。 我又借了

serverRegionShortcut = RegionShortcut.PARTITION_PERSISTENT

來自約翰,但我把它放在

@EnableEntityDefinedRegions

除此之外,我還需要堅持我的 PDX 類型(如果我不在 CacheServer 端堅持 Pdx 類型,Spring 和/或 Geode Gemfire 不喜歡我)。 因此,我使用相同的方法從SpringData Gemfire DiskStore持久化,但我在 CacheServer 端實現它,並在 application.properties 中添加一些額外條目,以告訴 spring 也持久化 Pdx 類型。

通過這種方式,我能夠在 CacheServer 端成功地創建和持久化 Region,並且還可以持久化 Pdx。

這是我借用SpringData Gemfire DiskStore的想法制作的完整代碼和 application.properties。

如果有人能夠告訴我這種解決方法是否是一種好方法,或者是否有任何其他方法或更好的想法,我將不勝感激(仍然想知道為什么@EnableClusterConfiguration 不喜歡我,而其他人對此沒有任何問題:= (所以如果有人能夠告訴我我的錯誤在哪里,我真的很感激)。

客戶:

@SpringBootApplication
@ClientCacheApplication(logLevel = "debug", locators = {@Locator(host = "localhost", port = 10334)})
@EnablePool(name="neptunusPool", servers=@Server(host="localhost", port=41414))
@EnableGemfireRepositories(basePackageClasses= {TitleContentRepository.class})
@EnableEntityDefinedRegions(basePackageClasses= {TitleContent.class
})
//@ReplicateRegion
//@EnableClusterDefinedRegions
//@EnableCachingDefinedRegions
//@EnableGemfireCaching
@EnableIndexing
//@EnableClusterConfiguration
@EnablePdx

public class CommerceHostGeodeApplication {

    public static void main(String[] args) {

        SpringApplication.run(CommerceHostGeodeApplication.class, args);

    }

}

在客戶端,相同的 POJO、Repository 和 RestController 和 application.properties 中除了 server.port 定義之外沒有任何內容。

緩存服務器:

@SpringBootApplication
@CacheServerApplication(locators="localhost[10334]", name="GeodeServerApplication" )
@EnableCacheServer(name="neptunus", autoStartup=true, hostnameForClients = "localhost", port = 41414)
@EnableCachingDefinedRegions
@EnableGemfireCaching
@EnablePdx
@EnableManager
@EnableHttpService
@EnableDiskStore(name = "disk_store")
@EnableEntityDefinedRegions(basePackageClasses= {TitleContent.class
}, serverRegionShortcut = RegionShortcut.PARTITION_PERSISTENT)
public class GeodeServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(GeodeServerApplication.class, args);
    }

}

CACHESERVER application.properties:

server.port=15010
spring.data.gemfire.disk.store.name=disk_store
spring.data.gemfire.disk.store.directory.location=/Users/ars/geode/data
spring.data.gemfire.pdx.disk-store-name=disk_store
spring.data.gemfire.pdx.persistent=true
spring.data.gemfire.management.use-http=true

在 CacheServer 啟動時,區域被創建並且能夠持久化/保存到磁盤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM