如何从Spring WebFlux应用程序连接到两个不同的Cassandra集群?

jhkqcmku  于 2023-05-06  发布在  Cassandra
关注(0)|答案(1)|浏览(154)

我需要从我的应用程序连接到两个不同的Cassandra集群。你有一个例子,我可以在Spring WebFlux中做到这一点吗?
我试着在网上寻找例子,但我找不到一个足够清晰的例子。

oug3syen

oug3syen1#

您需要使用@Bean注解定义两个Cassandra会话,每个会话都有自己的一组接触点和CQL客户端端口。下面的示例显示了使用@Value注解创建的变量,用于从application.properties文件中检索配置参数。

@Configuration
public class CassandraConfiguration {

    @Value("${cassandra1.contactPoints}")
    private String cassandra1ContactPoints;

    @Value("${cassandra2.contactPoints}")
    private String cassandra2ContactPoints;

    @Value("${cassandra1.port}")
    private int cassandra1Port;

    @Value("${cassandra2.port}")
    private int cassandra2Port;

    @Value("${cassandra1.keyspace}")
    private String cassandra1Keyspace;

    @Value("${cassandra2.keyspace}")
    private String cassandra2Keyspace;

    @Bean("cassandra1Session")
    public CqlSession cassandra1Session() {
        CqlSession session = Cluster.builder()
            .addContactPoints(cassandra1ContactPoints.split(","))
            .withPort(cassandra1Port)
            .build();
        return session.connect(cassandra1Keyspace);
    }

    @Bean("cassandra2Session")
    public CqlSession cassandra2Session() {
        CqlSession session = Cluster.builder()
            .addContactPoints(cassandra2ContactPoints.split(","))
            .withPort(cassandra2Port)
            .build();
        return session.connect(cassandra2Keyspace);
    }
}

然后可以在WebFlux控制器中使用这些会话cassandra1Sessioncassandra1Session。例如:

@RestController
public class MyController {

    @Autowired
    @Qualifier("cassandra1Session")
    private CqlSession cassandra1Session;

    @Autowired
    @Qualifier("cassandra2Session")
    private CqlSession cassandra2Session;

    @GetMapping("/cassandra1Data")
    public Flux<Row> getCassandra1Data() {
        String query = "SELECT * FROM mytable";
        return cassandra1Session.executeReactive(query).flux();
    }

    @GetMapping("/cassandra2Data")
    public Flux<Row> getCassandra2Data() {
        String query = "SELECT * FROM mytable";
        return cassandra2Session.executeReactive(query).flux();
    }
}

请注意,@Autowired注解用于将Cassandra会话注入控制器,@Qualifier注解用于指定要注入的会话。干杯!

相关问题