zoukankan      html  css  js  c++  java
  • RPC和MQ

    https://www.zhihu.com/question/34243607

    https://blog.csdn.net/cfydaniel/article/details/44621163


    rpc让你远程调用象本地调用,一般是同步的,例如,你读一个文件,象调用本地的函数,就是时间久点。
    消息代理框架一般是异步的,一个线程send,另外一个线程recv。
    https://www.zhihu.com/question/27230866

    最大的区别是,rpc没有broker, 而消息队列是需要管理消息的存储的,rpc没有存储,只有通信。


    protool buffer 是一种序列化方式,google开源的gPRC则是一个基于Protocol Buffers序列化的RPC框架,Thrift也是个RPC框架 ,这两个都是跨平台RPC框架
    RPC一般用于同步场景
    ActiveMQ,RabbitMQ是流行的消息队列(消息中间件),消息队列一般用于异步场景


    不管是消息队列还是rpc调用都是 分布式下面的 通信方式。
    消息队列最容易理解的方式就是生产者消费者模式,使两个应用解耦。mq等框架就是对这的具体实现。
    rpc中主要有两点,一是消息的传输格式(文本或二进制),二是消息传输方式(http或tcp)。有的框架是对前者实现,如probuffer,有的是对后面实现,如netty,还有的就是一个整体实现,如thrift。
    不管怎样,他们都是为了实现通信。


    消息代理,又称消息队列,是面向队列的,主要维护客户端和服务端之间的消息,因此往往会有独立消息中间件,有的消息队列也会实现消息持久化,掉电不丢失。

    RPC框架也是有消息队列的,只不过你不用管消息队列这些东西,你只管调用就好。

    如果你的业务包颗粒比较小,比如就是取出一个数据,那么用RPC就好。

    如果你业务包颗粒比较大,比如完成一个订单业务,操作复杂,耗时较长,那么可以把这个业务存到消息队列中间件。


    --------------   
    一,消息队列服务一般用于设计多系统之间的信息传输,一般这种传输不需要对方对数据做出回应。它最常见的方式是构建异步的生产者-消费者模式。我们在系统开发中,有些业务并不需要及时返回结果,我们可以把这些操作放到队列中,然后另起一个消费者去处理它。比如日志,数据库异步更新。
    二,rpc一般是用于服务器与服务器进程之间通信,这种通信有请求和应答。它是建立在底层的socket通信之上的。封装为rpc之后,更加方便建立通信。就像在同一个进程中调用对方的方法一样。它本地的方法名一般和请求到达的服务器的方法名一一对应。这样可以更好的把模块划分。所以它是应对分布式而生的。比如一个网站,一开始可能所有的服务在一个进程中,但是随着业务的增长,一个进程处理不过来,这时就需要把业务拆分成多个,分部到不同的机器上去。


  • 相关阅读:
    99乘法表的几种实现方法
    log4net使用(包括单个文件和按日期生成多个文件)
    c# 压缩文件
    寻找Windows下MySQL的错误日志
    MySQL 索引
    java hashCode 作用
    springMVC swagger2
    ConcurrentHashMap原理分析(1.7与1.8)
    国产烂片深度揭秘
    Practice| 类型转换| 逻辑运算
  • 原文地址:https://www.cnblogs.com/linewman/p/9918618.html
Copyright © 2011-2022 走看看