如何配置Apache Ignite缓存复用MongoDB持久化存储连接?
Apache Ignite MongoDB存储连接复用配置方案
默认情况下,Ignite的MongoDbStore确实会因缓存实例或操作创建多个连接,但可以通过配置MongoDB Java驱动的连接池来实现连接复用,无需为每个缓存新建独立连接。
核心思路
Ignite的MongoDB存储底层依赖官方MongoDB Java驱动,而该驱动本身自带连接池机制。只需为所有缓存的MongoDbStore配置共享的连接池参数,就能让多个缓存复用同一连接池内的连接。
具体配置步骤
自定义MongoDB连接池参数
通过MongoClientOptions设置连接池的核心参数,比如最大连接数、最小空闲连接数、超时时间等,确保连接池能高效复用连接。共享连接池配置到所有缓存
确保所有使用MongoDB存储的缓存都引用同一个MongoClientOptions配置(或共享同一个MongoClient实例),避免每个缓存单独初始化新的连接池。
代码示例(Java)
// 配置MongoDB连接池参数 MongoClientOptions clientOptions = MongoClientOptions.builder() .connectionsPerHost(15) // 单主机最大连接数 .minConnectionsPerHost(3) // 最小空闲连接数 .connectTimeout(5000) // 连接超时时间 .socketTimeout(30000) // 套接字超时时间 .build(); // 初始化MongoDbStore工厂,绑定连接池配置 MongoDbStoreFactory<String, Object> mongoStoreFactory = new MongoDbStoreFactory<>(); mongoStoreFactory.setConnectionString("mongodb://localhost:27017"); mongoStoreFactory.setDatabase("ignite_persistence"); mongoStoreFactory.setCollection("cache_data"); mongoStoreFactory.setMongoClientOptions(clientOptions); // 将存储工厂绑定到缓存配置 CacheConfiguration<String, Object> cacheCfg = new CacheConfiguration<>("sharedCache"); cacheCfg.setCacheStoreFactory(FactoryBuilder.factoryOf(mongoStoreFactory)); cacheCfg.setReadThrough(true); cacheCfg.setWriteThrough(true); // 启动Ignite并加载缓存 Ignite ignite = Ignition.start(); ignite.getOrCreateCache(cacheCfg);
XML配置示例
<bean id="mongoClientOptions" class="com.mongodb.MongoClientOptions" factory-method="builder"> <property name="connectionsPerHost" value="15"/> <property name="minConnectionsPerHost" value="3"/> <property name="connectTimeout" value="5000"/> <property name="socketTimeout" value="30000"/> </bean> <bean id="mongoStoreFactory" class="org.apache.ignite.cache.store.mongodb.MongoDbStoreFactory"> <property name="connectionString" value="mongodb://localhost:27017"/> <property name="database" value="ignite_persistence"/> <property name="collection" value="cache_data"/> <property name="mongoClientOptions" ref="mongoClientOptions"/> </bean> <bean id="cacheCfg" class="org.apache.ignite.configuration.CacheConfiguration"> <property name="name" value="sharedCache"/> <property name="cacheStoreFactory"> <bean class="org.apache.ignite.configuration.FactoryBuilder" factory-method="factoryOf"> <constructor-arg ref="mongoStoreFactory"/> </bean> </property> <property name="readThrough" value="true"/> <property name="writeThrough" value="true"/> </bean>
注意事项
- 避免为每个缓存单独创建
MongoClient或MongoClientOptions实例,否则会生成多个独立连接池,无法实现连接复用。 - 建议使用Ignite 2.10及以上版本,确保与MongoDB驱动(3.12+)的连接池功能兼容。
- 根据业务并发量调整
connectionsPerHost参数,避免连接池过载或资源浪费。
内容的提问来源于stack exchange,提问作者ApachieIgniteNewbie123
相关产品推荐
相关产品推荐

