SpringBoot集成RabbitMq实现对象传送

需求

在储存博客或文章的时候,要同时把文章存入mysql数据库和elasticsearch中,但是串行执行会导致过程太慢,于是用到rabbitmq消息队列,减少业务逻辑反应时间。

解决过程

controller收到前端的创建的文章实体,先存入mysql,然后将文章放入消息队列,此时可以直接返回创建成功了,不需要在意有没有存入elasticsearch。

代码

可以自定义消息转换器

@Configuration
public class RabbitMqConfig{
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

新建博客业务逻辑

log.info("储存id为 {}的博客", blog.id);
blogService.saveBlog(blog, projectId);
//将博客放入消息队列           1.交换机 2. 路由键 3. 博客实体
rabbitTemplate.convertAndSend("blog", "blog.save", blog);
//返回创建成功后的内容
return Result.success(MapUtil.builder().put("blog", blog)
.put("pushTags", keywordsExtraction.generate(blog.getContent()))
.put("columns", columnService.getColumnsByUserId(blog.getUserId())).map());

消息队列接收博客实体放入ES

这里用的是topic策略
参数接收消息队列的message,用rabbitTemplate获取消息转换器把message转换成博客实体存入ES

@RabbitListener(bindings = {
            @QueueBinding(value = @Queue, exchange = @Exchange(value = "blog", type = "topic"), key = "blog.save")
    })
    public void esSaveBlog(Message message){
        Blog blog =(Blog) rabbitTemplate.getMessageConverter().fromMessage(message);
        log.info("ES存入博客{}", blog.getTitle());
        EsBlog esBlog = new EsBlog();
        BeanUtils.copyProperties(blog, esBlog);
        esBlogRepository.save(esBlog);
    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值