Исключение составляет Cassandra Thrift API. Плохая версия в readMessageBegin
Я пытаюсь сделать клиент Cassandra и выполнить запрос CQL с помощью этого клиента.
public Cassandra.Client getClient(String node, Integer port) throws TTransportException{
TTransport tr =new TSocket(node, port);
TProtocol proto = new TBinaryProtocol(tr);
Cassandra.Client client = new Cassandra.Client(proto);
tr.open();
return client;
}
Я могу создать клиента, но затем использовать его для вызова любых методов, даже:
KsDef keyspaceReturned =this.client.describe_keyspace(KEYSPACE)
он продолжает давать следующее исключение:
org.apache.thrift.protocol.TProtocolException: Bad version in readMessageBegin
at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:223)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:69)
at org.apache.cassandra.thrift.Cassandra$Client.recv_set_keyspace(Cassandra.java:608)
at org.apache.cassandra.thrift.Cassandra$Client.set_keyspace(Cassandra.java:595)
at com.indigo.deep.ws.persistence.cassandra.PersistToCassandraImpl.getPages(PersistToCassandraImpl.java:71)
at com.indigo.deep.ws.rest.ApplicationResource.pages(ApplicationResource.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
Я не могу понять, на какую версию жалуется. При проведении онлайн-исследований было высказано предположение, что это может быть связано с несоответствием транспорта в рамке и без рамки на сервере и клиенте. Я пытался изменить
thrift_framed_transport_size_in_mb: 0
в cassandra.yaml как в моем коде, чтобы получить клиента,
TTransport tr =new TSocket(node, port);
TProtocol proto = new TBinaryProtocol(tr)
TSocket используется, и установка значения в ноль для свойства размера framed_transport должна отключить TFramedTransport и включить TSocket.
При использовании TSocket я получаю еще одно исключение:
cassandra org.apache.thrift.TApplicationException: describe_keyspace failed: out of sequence response.
Информация о версии:
[cqlsh 5.0.1 | Кассандра 3.0.9 | CQL spec 3.4.0 | Собственный протокол v4] Maven Dependency:
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<version>3.0.9</version>
</dependency>
В конце концов, я хочу выполнить как:
String query ="Select * from pages";
client.execute_cql_query(ByteBuffer.wrap(query.getBytes("UTF-8")), Compression.NONE);
и обработать результаты.
Я застрял на этом в течение дня и был бы очень признателен за любую помощь. Спасибо.