Springboot+rabbitmq如何实现高并发的rpc调用

2019年5月最新更新:注意!并不推荐RPC式的mq调用,这么做完全没有发挥mq异步削峰的作用。之所以会有这篇文章完全是因为架构无法更改。

RPC式的mq调用,会使调用端的线程一直阻塞,中间还过了一层mq。虽然仍旧是rpc式的通信,但是效果还不如dubbo,建议需要同步的业务直接使用dubbo。

2018年8月:

一.背景

        公司项目的收单前置服务A与收单服务B之间是通过rabbitmq来通信的,而且A服务在给B服务发送信息后,必须收到返回结果(同步通知),于是使用了此方法:

rabbitTemplate.convertSendAndReceive(reqDto);

        但是,由于B服务的后续处理时间过长,导致A服务接收B服务处理结果的时间大幅增加,TPS只有每秒近2个,远远不达标。故对rabbitmq进行优化。

        二.分析

        首先如何实现springboot整合rabbitmq,可以 查看这篇文章点击打开链接

        众所周知,rabbitmq解决的是异步服务之间的调用,即生产者不会关心消费者做了什么,反之亦然。但是此处的情况有些特殊,生产者必须要等待消费者处理完成并且拿到返回结果,才会结束线程。所以,要实现高并发的rpc,必须要能够开启多个让消费者消费的线程,用以同时消费多条消息,用空间换时间。

        三.实现

        首先在收单前置服务模块中,配置rabbitmq。

 

        用一个RabbitMqConfig类,配置connectionfactory,cacheconnectoionfactory,rabbittemplate,directexchange,此外,除了配置请求队列和请求队列的binding以外,必须还需要配置返回队列(reply-to)以及返回队列的binding,以及用来监听返回队列的监听器simplemessagelistenercontainer,用以接收消费者返回的消息。而在这个simplemessagelistenercontainer中,可以配置消费者数量,每个消费者一次性拉取的消息数,最重要的,它可以配置一个executorservice线程池,给你配置的消费者使用。如果不配置这个线程池&

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值