springboot项目实现mongodb changestream监听mongodb数据库变更 并同步到kafka详细操作 不到几十行代码

步骤:

        第一步:首先mongodb数据库得支持集群,单机下不支持

       第二步:在springboot项目引入mongodb 与kafka依赖

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
       <groupId>org.springframework.kafka</groupId>
       <artifactId>spring-kafka</artifactId>
</dependency>

     第三步:编写监听mongodb数据库集合实现类

   

@Component
public class mongodbChangeStreamListener   {
    @Autowired
    private MongoTemplate mongoTemplate;

    @Autowired
    private KafkaMessageProducer kafkaMessageProducer;

    @Async
    @EventListener(ApplicationReadyEvent.class)
    public void listen(){
        try {
             //条件过滤
            Bson filter = Filters.and(
                    Filters.in("operationType","update","replace"),//可以指定监听数据库操作类型 
                    Filters.in("fullDocument.字段名", 条件值), //根据业务需求可以指定过滤条件
                    Filters.eq("fullDocument.字段名", 条件值)); 

            //可以设置需要返回的字段,不设置则返回全部的字段
            Bson project = Projections.include("fullDocument.字段","fullDocument.字段");
            List<Bson> bsons = 
            Arrays.asList(Aggregates.match(filter),Aggregates.project(project));
            ChangeStreamIterable<Document> changeStream = mongoTemplate.getCollection("集合名称")
                    .watch(bsons).fullDocument(FullDocument.UPDATE_LOOKUP);
            for (ChangeStreamDocument<Document> changeStreamDocument : changeStream) {
                //获取需要的内容
                Document fullDocument = changeStreamDocument.getFullDocument();
                  //然后拿到变更的数据 根据业务需求进行处理  可以同步到消息中间件如kafka
                   kafkaMessageProducer.push("topic",fullDocument) 
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
      
        }
    }

}

 第四步:kafka生产者

@Component
public class KafkaMessageProducer {

    @Autowired
    KafkaTemplate kafkaTemplate ;

    public void push(String topic,String msg) {
        try {
            kafkaTemplate.send(topic,msg);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值