zoukankan      html  css  js  c++  java
  • 消息队列

    消息队列不仅解决了服务内部由于业务流程的同步执行而造成的阻塞,并且可以实现业务解耦。

    消息队列:顾名思义,首先是一个队列,存放消息的队列

    队列,先进先出,队列的操作有入队和出队,

    也就是你有一个程序在产生内容然后入队(生产者)
    另一个程序读取内容,内容出队(消费者)

    异步消息:

    同步机制:当客户端调用远程方法时,客户端必须等到远程方法完成后,才能继续执行。即使远程方法不向客户端返回任何消息,客户端也要被阻塞直到服务完成。如果消息时异步发送的,客户端不需要等待服务处理消息,甚至不需要等待消息投递完成。

    消息队列有两种模型:

    1、点对点消息模型

      在点对点消息模型中,每个消息都有一个发送者和一个接收者,当消息代理得到消息时,它将消息放入一个队列中。当接收者请求队列中的下一条消息时,消息会从队列中取出,并投递给接收者。因为消息投递后会从队列中删除,这样就可以保证消息只能投递给一个接收者。

    2、发布——订阅消息模型

      在发布——订阅模型中,消息会发送给一个主题。与队列类似,多个接收者都可以监听一个主题。但是,与队列不同的是,消息不再是只投递给一个接收者,而是主题的所哟订阅者都会接收此消息的副本。

     

    异步消息的优点:

    虽然同步通信比较容易理解,建立起来也比较简单,但是采用同步通信机制访问远程服务的客户端存在几个限制,最主要的是:

    1.同步通信意味着等待。当客户端调用远程服务的方法时,它必须等待远程方法结束后才能继续执行。如果客户端与远程服务频繁通信,或者远程服务响应很慢,就会对客户端应用的性能带来负面影响。

    2.客户端通过接口与远程服务相耦合。如果服务的接口发生变化,此服务的所有客户端都需要做相应的改变。

    3.客户端与远程服务的位置耦合。客户端必须配置服务的网络位置,这样它才直到如何与远程服务进行交互。如果网络拓扑进行调整,客户端也需要重新配置新的网络位置。

    4.客户端与服务的可用性相耦合,如果远程服务不可用,客户端实际上也无法正常运行。

  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/7577111.html
Copyright © 2011-2022 走看看