Git Product home page Git Product logo

spring-amqp-rpc's Introduction

spring-amqp-rpc

使用Spring Boot(1.5.9)+Spring AMQP+RabbitMQ实现RPC的demo

为何要使用MQ实现RPC

  1. 相比于http接口实现的RPC,MQ实现的RPC客户端不需要知道RPC服务端的存在。
  2. MQ实现的RPC服务端高可用,只需要简单地启动多个RPC服务即可,不需要额外的服务注册发现以及负载均衡。
  3. 如果原有的MQ的普通消息需要知道执行结果,可以很方便地切换到RPC模式。
  4. RabbitMQ RPC的工作方式非常擅长处理异步回调式的任务

为何要写这个demo

Spring AMQP的官方文档提供了一个RPC的demo,但是RPC服务端是同步返回结果的,同步的RPC服务会顺序执行RPC队列中的请求, 如果某一个请求执行较慢,会阻塞后面的请求并造成严重的性能问题。解决这种问题的方法是设置并发消费者(concurrentConsumers属性)或者启动多个RPC服务。 这在大多数情况下是有效的,但是如果这个任务是异步的,或者甚至是事件驱动的(比如NIO中的readable事件),那么同步阻塞消费者线程的方式就不太合适了。 该Demo中提供了3个服务端示例:

  • 同步执行的RPC服务;多执行几次测试用例,客户端可能会超时(convertSendAndReceive默认5秒)。
  • 异步执行的RPC服务,客户端为每个请求创建一个临时的回复队列(或者使用Direct reply-to)。
  • 异步执行的RPC服务,客户端使用固定回复队列,需要提供额外的correlationId以关联请求和响应。

参考资料

spring-amqp-rpc's People

Contributors

cbwleft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.