Mongoo Oplog Monitor on contextRefreshEvent

时间:2019-02-21 07:39:11

标签: mongodb rest spring-boot microservices mongodb-oplog

我创建了一个实现ApplicationListener<ContextRefreshedEvent>的类。我在onApplicationEvent上执行的是Mongo oplog监视相关的代码。

while(true):我用tailablecursor创建了一个.cursorType(CursorType.TailableAwait)并检查cursor.hasNext()是否触发事件

 @Component
 @ConfigurationProperties
 public class mongoWatchService implements ApplicationListener<ContextRefreshedEvent> {

       ------------------------    
      .........................
      BsonTimestamp timestamp = null;
    MongoCursor<Document> cursor;
    while (true) {
        try {

            cursor = mongoCollection.find(and(new Document()
                    .append("ns", String.join(".", "db", "collection")), new Document()
                    .append("op", "i")))
                    .cursorType(CursorType.TailableAwait).noCursorTimeout(true).iterator();


            while (cursor.hasNext()) {
                // Can occure Null pointers class cast Exceptions because of data mappings
                final Document document = cursor.next();
                timestamp = document.get("ts", BsonTimestamp.class);
                final Document o = document.get("o", Document.class);
                dsClient.event.emit("/event/", o); //TODO check what is the data object we need to emit


            }
        } catch (RuntimeException re) {
            logger.error("Error Occurred {} in MongoWatch service" + re.getMessage());
        }

    }

当我运行应用程序启动过程时,我的问题在下图所示的位置等待。

enter image description here

tomcat启动时的日志状态

enter image description here

,但其余应用程序未在端口上运行。 Mongo oplog监视是可行的,但其余部分则无效。当我将其作为组件其余应用程序删除时,但mongo oplog监视逻辑不起作用。我在这里做错什么了吗,任何人都可以引导我采取正确的方法。

0 个答案:

没有答案