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之后,更加方便建立通信。就像在同一个进程中调用对方的方法一样。它本地的方法名一般和请求到达的服务器的方法名一一对应。这样可以更好的把模块划分。所以它是应对分布式而生的。比如一个网站,一开始可能所有的服务在一个进程中,但是随着业务的增长,一个进程处理不过来,这时就需要把业务拆分成多个,分部到不同的机器上去。


  • 相关阅读:
    python分包写入文件,写入固定字节内容,当包达到指定大小时继续写入新文件
    java 封装及this 用法
    [效率提升] 记一次使用工具编辑正则表达式快速输出匹配结果
    java用星星符号打印出一个直角三角形
    java按行和列进行输出数据
    java 三种循环及注意事项
    数据的运算,求和,两数求最大,三数求最大,两数是否相等
    采用位异或方式将两个变量数值调换
    今天遇到一件开心事,在eclipse编写的代码在命令窗口中编译后无法运行,提示 “错误: 找不到或无法加载主类”
    定义 java 基本数据类型
  • 原文地址:https://www.cnblogs.com/linewman/p/9918618.html
Copyright © 2011-2022 走看看