Cassandra - 写入错误。如何解决?
Posted
技术标签:
【中文标题】Cassandra - 写入错误。如何解决?【英文标题】:Cassandra - error writing. How to solve it? 【发布时间】:2020-03-29 06:45:18 【问题描述】:在我们公司,我们做一个项目,使用 apache,Cassandra。直到最近,我们还使用了较旧的驱动程序。昨天,我们尝试用最新的 4.3.0 替换它。我们连接到数据库,一切正常。问题是当我尝试替换 ear 文件或添加另一个使用相同代码的子项目时。
此时,我收到此错误。
13:23:21,142 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 97) MSC000001: Failed to start service jboss.deployment.subunit."test-ear.ear"."test-ejb.jar".component.TestBean.START: org.jboss.msc.service.StartException in service jboss.deployment.subunit."test-ear.ear"."test-ejb.jar".component.TestBean.START: java.lang.IllegalStateException: WFLYEE0042: Failed to construct component instance
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:57)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:834)
at org.jboss.threads@2.3.3.Final//org.jboss.threads.JBossThread.run(JBossThread.java:485)
Caused by: java.lang.IllegalStateException: WFLYEE0042: Failed to construct component instance
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:163)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:134)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:88)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.singleton.SingletonComponent.getComponentInstance(SingletonComponent.java:127)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.singleton.SingletonComponent.start(SingletonComponent.java:141)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.ComponentStartService$1.run(ComponentStartService.java:54)
... 8 more
Caused by: javax.ejb.EJBException: com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach any contact point, make sure you've provided valid addresses (showing first 1, use getErrors() for more: Node(endPoint=/127.0.0.1:9042, hostId=null, hashCode=3bad1448): com.datastax.oss.driver.api.core.connection.ConnectionInitException: [s0|control|connecting...] init query OPTIONS: error writing )
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.BMTInterceptor.handleException(BMTInterceptor.java:83)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.EjbBMTInterceptor.checkStatelessDone(EjbBMTInterceptor.java:91)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.EjbBMTInterceptor.handleInvocation(EjbBMTInterceptor.java:106)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.tx.BMTInterceptor.processInvocation(BMTInterceptor.java:57)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.weld@18.0.1.Final//org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3@18.0.1.Final//org.jboss.as.ejb3.component.singleton.StartupCountDownInterceptor.processInvocation(StartupCountDownInterceptor.java:25)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee@18.0.1.Final//org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:161)
... 13 more
我试图在互联网上寻找这个问题,研究他们的文档。我没有找到解决办法。
我连接到数据库的非常基本的代码。
@PostConstruct
public void start()
log.info("start");
CqlSessionBuilder builder = CqlSession.builder();
builder.addContactEndPoint(new DefaultEndPoint(new InetSocketAddress("127.0.0.1", 9042)));
builder.withLocalDatacenter("datacenter1");
session = builder.build();
@PreDestroy
public void stop()
log.log(Level.INFO, "stop");
session.close();
我使用wildfly 作为服务器。当我替换 ear 文件或添加另一个具有相同代码的文件时,出现错误。
关于如何解决它的任何想法?
【问题讨论】:
您之前使用什么主机和端口连接到 Cassandra?AllNodesFailedException
表示驱动程序无法连接到 127.0.0.1:9042
的 Cassandra。 Cassandra 是否已启动并运行?
@ck1 我们使用与以前相同的主机和端口。正如我在第一次部署时所说,没有问题。一切都连接并有效。当我用相同的代码替换ear 文件或部署第二个ear 文件时,会产生错误。当数据库不可用时,它只写“No host Available”但也写“init query OPTIONS: error writing”。起初我以为这是一个未完成的会话,但我关闭了每个会话。
连接本地数据中心时无需提供本地主机 IP 和端口。 Cassandra 驱动程序的默认设置就是这样。请确保您的 Cassandra 本地数据中心已启动并运行
@GAK 谢谢,但在生产版本上运行 cassandra 在另一个 ip 上。数据中心正在运行。不幸的是,这并没有解决任何问题。
【参考方案1】:
我有一个解决方案。经过2天的搜索和测试,我发现了一个错误。该错误在 Wildfly18 io.netty 中。一旦我将 io.netty-all 打包到项目中并删除了 Wildfly 提供的所有内容。
可能是 Wildfly18 提供了一些错误的版本。
【讨论】:
以上是关于Cassandra - 写入错误。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
Uber如何做到每秒100万次写入操作?在多个数据中心使用Mesos和Cassandra
在 Cassandra 中使用轻量级事务 (CAS) 时,我们如何避免丢失写入?