关于使用 ReactiveMongoTemplate 连接 Mongo Cluster

如何解决关于使用 ReactiveMongoTemplate 连接 Mongo Cluster

我有一个 Spring Boot 应用程序并尝试使用 ReactiveMongoTemplate 连接到 Mongo 数据库集群。

我可以使用以下代码连接到 Mongo DB:

application.properties 内容

spring.data:mongodb:host: localhost
spring.data:mongodb.port: 13.45.67.278
spring.data:mongodb.database: logs_db 

在我的 ReactiveMongoConfig 内容是这样的:

public class ReactiveMongoConfig {
    
    @Autowired
    private Config config;
    @Autowired
    private MongoClient mongoClient;
    
    @Bean
    public ReactiveMongoTemplate reactiveMongoTemplate() {
        return new ReactiveMongoTemplate(mongoClient,config.getMongoDb());
    }
}

有了这个,我可以连接到数据库,然后执行任何操作 bu Autowiring ReactiveMpongoTemplate 如下

public class UserLogDaoImpl implements UserLogDao {
    
    static final String DOCUMENT_NAME = "Useractivitylogs";

    @Autowired
    private ReactiveMongoTemplate reactiveMongoTemplate;

    @Override
    public void storeLogs(List<Useractivitylog> useractivitylogs) { 
        try {
            log.info("Inside storeLogs dao method");
            reactiveMongoTemplate.insert(useractivitylogs,DOCUMENT_NAME + "_" +       LocalDate.Now().getYear() + "_" + LocalDate.Now().getMonthValue()).subscribe();
            
        } catch (DataAccessException ex) {
            log.error("Error while adding logs for {}",useractivitylogs);
        } 
    }

}

我想连接到 MongoCluster 而不仅仅是一个实例。为此,我正在做的如下:

application.properties 内容

spring.data.mongodb.uri: mongodb://abc:xyz@15.207.198.133:27017,15.207.198.133:27018/admin

我也尝试过:

spring.data.mongodb.uri:mongodb://abc:xyz@15.207.198.133:27017,15.207.198.133:27018/admin?rs0

rs0 是我的 MongoDB 副本名称

我的 ReactiveMongoConfig 类如下所示:

@Configuration
public class ReactiveMongoConfig {

    @Autowired
    private Config config;

    @Bean
    public ReactiveMongoTemplate reactiveMongoTemplate() {
        
        MongoClient mongoClient = MongoClients.create(createMongoClientSettings());
        return new ReactiveMongoTemplate(mongoClient,"admin");
    }

    private MongoClientSettings createMongoClientSettings() {
        ConnectionString connectionString = new ConnectionString(config.getMongoUri());

        MongoClientSettings mongoClientSettings = MongoClientSettings.builder().readConcern(ReadConcern.DEFAULT)
                .writeConcern(WriteConcern.MAJORITY).readPreference(ReadPreference.secondary())
                .applyConnectionString(connectionString).build();
        return mongoClientSettings;
    }

}

当我在上面尝试时,我在应用程序日志中看到下面,它显示它首先连接但然后立即说

连接到服务器时监视器线程中的异常

[30m2021-05-20 21:19:21,087[0;39m [34mINFO [0;39m [[34mmain[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Cluster created with settings {hosts=[15.207.198.133:27017,15.207.198.133:27018],mode=MULTIPLE,requiredClusterType=UNKNowN,serverSelectionTimeout='30000 ms'}
[30m2021-05-20 21:19:21,087[0;39m [34mINFO [0;39m [[34mmain[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Adding discovered server 15.207.198.133:27017 to client view of cluster
[30m2021-05-20 21:19:21,127[0;39m [34mINFO [0;39m [[34mmain[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Adding discovered server 15.207.198.133:27018 to client view of cluster
[30m2021-05-20 21:19:21,271[0;39m [34mINFO [0;39m [[34mcluster-rtt-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27018[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Opened connection [connectionId{localValue:1,serverValue:77}] to 15.207.198.133:27018
[30m2021-05-20 21:19:21,description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Opened connection [connectionId{localValue:3,serverValue:4432}] to 15.207.198.133:27017
[30m2021-05-20 21:19:21,271[0;39m [34mINFO [0;39m [[34mcluster-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27018[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Opened connection [connectionId{localValue:2,serverValue:78}] to 15.207.198.133:27018
[30m2021-05-20 21:19:21,description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Opened connection [connectionId{localValue:4,serverValue:4433}] to 15.207.198.133:27017
[30m2021-05-20 21:19:21,274[0;39m [34mINFO [0;39m [[34mcluster-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Monitor thread successfully connected to server with description ServerDescription{address=15.207.198.133:27017,type=REPLICA_SET_PRIMARY,state=CONNECTED,ok=true,minWireversion=0,maxWireversion=8,maxDocumentSize=16777216,logicalSessionTimeoutMinutes=30,roundtripTimeNanos=49970343,setName='rs0',canonicalAddress=mongo1:27017,hosts=[mongo1:27017],passives=[mongo2:27017],arbiters=[mongo3:27017],primary='mongo1:27017',tagSet=TagSet{[]},electionId=7fffffff0000000000000001,setVersion=3,topologyVersion=null,lastWriteDate=Thu May 20 21:19:15 IST 2021,lastUpdateTimeNanos=217465506716392}
[30m2021-05-20 21:19:21,description='null'}-15.207.198.133:27018[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Monitor thread successfully connected to server with description ServerDescription{address=15.207.198.133:27018,type=REPLICA_SET_SECONDARY,roundtripTimeNanos=49842146,canonicalAddress=mongo2:27017,electionId=null,lastUpdateTimeNanos=217465506716350}
[30m2021-05-20 21:19:21,275[0;39m [34mINFO [0;39m [[34mcluster-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: discovered cluster type of REPLICA_SET
[30m2021-05-20 21:19:21,description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Adding discovered server mongo1:27017 to client view of cluster
[30m2021-05-20 21:19:21,276[0;39m [34mINFO [0;39m [[34mcluster-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Adding discovered server mongo2:27017 to client view of cluster
[30m2021-05-20 21:19:21,277[0;39m [34mINFO [0;39m [[34mcluster-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Adding discovered server mongo3:27017 to client view of cluster
[30m2021-05-20 21:19:21,278[0;39m [34mINFO [0;39m [[34mcluster-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Server 15.207.198.133:27017 is no longer a member of the replica set.  Removing from client view of cluster.
[30m2021-05-20 21:19:21,282[0;39m [34mINFO [0;39m [[34mcluster-ClusterId{value='60a68501f3849a3e4f33908d',description='null'}-15.207.198.133:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Server 15.207.198.133:27018 is no longer a member of the replica set.  Removing from client view of cluster.
[30m2021-05-20 21:19:21,description='null'}-mongo3:27017[0;39m] [33mcom.mongodb.diagnostics.logging.SLF4JLogger[0;39m: Exception in monitor thread while connecting to server mongo3:27017
com.mongodb.MongoSocketException: mongo3: nodename nor servname provided,or not kNown
    at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:211)
    at com.mongodb.internal.connection.AsynchronousSocketChannelStream.openAsync(AsynchronousSocketChannelStream.java:60)
    at com.mongodb.internal.connection.AsynchronousChannelStream.open(AsynchronousChannelStream.java:124)
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:143)
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188)
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:144)
    at java.base/java.lang.Thread.run(Thread.java:834)

这有点烦人。

我的 Mongo 数据库集群在具有 3 个容器的 AWS EC2 实例上运行,每个容器运行仲裁节点、主节点和副本节点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?