我已经在docker中创建了一个单节点ScyllaDB,它已经启动并运行,下面是我的docker-compose命令:版本:"3"
services:
scylla-node1:
container_name: scylla-node1
image: scylladb/scylla
restart: always
command: --smp 2 --memory 1500M --broadcast-rpc-address 127.0.0.1 --listen-address 0.0.0.0
ports:
- 9042:9050
networks:
web:
networks:
web:
driver: bridge
阅读Scylla的文档时,它建议使用DataStax C#Driver for Apache Cassandra。因此,我在我的解决方案中使用了这个驱动程序。按照基本的示例,我很难让它工作。因此,
var cluster = Cluster.Builder()
.AddContactPoints("0.0.0.0")
.Build();
var session = cluster.Connect("sample_keyspace");
当代码到达Connect命令时,它会引发以下错误Cassandra. NoHostAvailableException:'尝试查询的所有主机均失败(尝试的主机为0.0.0.0:9042:SocketException '请求的地址在其上下文中无效。')'
首先,我可以通过CSQL实用程序连接到Scylla,并创建一个Keyspace,然后运行一个查询来确认Keyspace是否已经创建。
这是C#驱动程序的问题还是我做错了什么?
1条答案
按热度按时间xwmevbvl1#
在我看来,这像是网络问题,因为您的Docker容器似乎没有正确配置。
问题是C#驱动程序(您的应用程序)无法连接到容器,因为没有网络连接。这就是这个异常的含义:
我假设“CSQL实用程序”是一个拼写错误。您能够使用cqlsh进行连接的原因是因为您最有可能连接到:
这和远程连接不一样。公平地说,我只是假设,因为你没有提供细节。
你已经用
--broadcast-rpc-address 127.0.0.1
配置了容器,所以它只监听localhost
上的客户端连接,这意味着你不能用0.0.0.0
作为联系点。我还注意到,您已经将容器端口
9050
Map到主机端口9042
:默认情况下,Cassandra在端口
9042
上监听客户端连接,而不是9050
。如果端口9050
上没有监听到任何内容,则驱动程序没有连接到任何内容,也将导致NoHostAvailableException
。