首先,RabbitMQ解决什么问题?

1)信息的发送者和接收者如何维持连接,如果一方的连接中断,这期间的数据如何防止丢失?

2)如何降低发送者和接收者的耦合度?

3)如何让Priority高的接收者先接到数据?

4)如何做到load balance?有效均衡接收者的负载?

5)如何有效的将数据发送到相关的接收者?也就是说接收者subscribe 不同的数据,如何做有效的filter。

6)如何做到可扩展,甚至将这个通信模块发到cluster上?

7)如何保证接收者接收到了完整,正确的数据?

那么消息队列可以起到一个缓存的作用,先把工作记录下,然后尽自己最大努力进行读取.(具体功能请自行百度)

关键词

  1. Queue
    指具体某一个队列

  2. RouteKey
    路由和交换机在进行绑定时,定义一个路由名

  3. Exchange
    交换机,用于把生产者的消息根据不同工作方式分发到不同队列中.

  4. Publish
    消息发送者

  5. Consume
    消息接收者

  6. Message
    消息本身

6种主要工作模式

  1. HelloWorld
    这种方式是最简单的一个应用,P为生产方,C为接收方.如果班级里边只有我一个人,和一个老师可以看成是这种模式.那么队列呢..就是我手里的iphone吧.照着手机拍的内容先埋头写..

  2. Work queues 工作队列
    老师让两个学生帮忙跟着一起批作业.

  3. Publish/Subscribe 发布订阅模式
    可以看成如果说班级里边的人一起在抄黑板.可以看成这种模式.每个人得到的结果一样.
    老师只关注去写,不需要关注谁没有抄.这个是由学生去主动关注(绑定)的
    此方式实际上也可以看做是设计模式中观察者模式的分布式实现.
    同时因为这种方式导致了生产者与具体队列接耦.所以需要额外增加一个交换机

  4. Routing 路由方式
    老师批了不同课程的作业,并一起交给了班长,说根据课程发给课代表.再让课代表发给具体学生.
    那么老师是生产者,班长根据老师持续给的不同的作业本发给不同的课代表,班长即代表了Exchange,而课代表要发的作业则是具体的Queue.当然也可以某一个人是多个课程的课代表.

  5. Topics 主题方式
    期中考试,老师公布了所有人的考试试卷情况,有优良差三等,以及不同的课程.所以试卷的标题写的为"语文.差"."数学.优"..这样.同时安排一个人,对成绩为查的进行辅导,同时所有专业的成绩.也要通知课代表.即.一个消息可以通过.间隔,含有多重属性.不同的队列可以对特别属性做关注.比如进行辅导的人关注的关键字为**"*.差"** 而对于课代表来说.可能关心的是**"语文.*"**

  6. RPC 远程调用
    校长找个学生说去找下语文老师,让来校长室.我等着他.也就相当于发起了一个任务队列.并且发起者会等待.
    学生去办公室找了结果发现没人(消费端处理失败),等了一会人来了.并把老师带到了校长室.在这个期间校长一直在等,即便中途学生没找成功.
    在常规的RPC调用中,都是使用的单次链接,如果目标失败,则RPC失败,而使用MQ,目标失败, 可以从新领取RPC任务从新处理.在此期间RCP调用端一直阻塞

关于使用MQ的4个关键点

    1. 由于消息队列实现了顺序性,和可到达性.所以我们基于此设计就比较稳定
      之前的远程调用实现方式是采用数据库,并进行超时计数,问题在于有一些API必须先执行,比如推荐人的注册.但是因为超时机制的设计,可能会出现后执行问题.同时达到超时计数之后.就不在发送,可到达性就无从谈起.至于数据库对接么.即便是在一个机房甚至一台服务器上.对接时如果存在锁表.或者系统繁忙.也会导致对接失败.属于同步执行.而非异步执行.如果服务端距离比较远的话..那么网络的不稳定性.同时也不存在重发机制也会导致SQL执行出现问题.

    2. 效率问题,之前的对接方式,是实现通过数据库记录进行处理.并通过1秒执行一次定时任务进行查询.结果带来问题是某些项目的服务器一半以上的资源都在处理API表的查询工作.同时API的对接响应时间,也降低到0-1秒之间.
      MQ带来的好处在于他是一种基于TCP/IP的通讯方式,发送即收到.

    3. 拉上WorkerMan的原因.作为消息队列的消费端.需要时刻收取最新发来的消息并做处理.所以执行方式类似于一个服务端程序而不是一个定时的web脚本.而WorkerMan的作用就是把PHP变成应用程序.

    4. WorkerMan+PHP+rebbitMQ作为处理端,因我们的程序设计是基于Tp.所以希望能够让WorkerMan直接调用Model进行具体处理.如果中间在加一层CLI调用.就有点多余.

rabbitMQ常用方法说明 – 6中工作模式及关键点的更多相关文章

  1. RabbitMQ入门及其几种工作模式

    1.简介 MQ全程Message Queue,用于应用程序和应用程序间进行通信.RabbitMQ采用Erlang编写,实现了AMQP(高级消息队列)协议,跨平台,支持各种主流的操作系统和多种客户端. ...

  2. STM32中IO口的8中工作模式

    该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...

  3. 【RabbitMQ】工作模式介绍

    一.前言 之前,笔者写过< CentOS 7.2 安装 RabbitMQ> 这篇文章,今天整理一下 RabbitMQ 相关的笔记便于以后复习. 二.模式介绍 在 RabbitMQ 官网上提 ...

  4. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_7.RabbitMQ研究-工作模式-工作队列模式

    RabbitMQ有以下几种工作模式 : 1.Work queues 2.Publish/Subscribe 3.Routing 4.Topics 5.Header 6.RPC 1.Work queue ...

  5. java面试一日一题:rabbitMQ的工作模式

    问题:请讲下rabbitMQ的工作模式 分析:该问题纯属概念题,需要掌握rabbtiMQ的基础知识,同时该题也是切入MQ的一个引子: 回答要点: 主要从以下几点去考虑, 1.rabbitMQ的基本概念 ...

  6. 面试官:RabbitMQ有哪些工作模式?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又.又.又来面试了,还是老规 ...

  7. SpringBoot整合RabbitMQ实现六种工作模式

    RabbitMQ主要有六种种工作模式,本文整合SpringBoot分别介绍工作模式的实现. 前提概念 生产者 消息生产者或者发送者,使用P表示: 队列 消息从生产端发送到消费端,一定要通过队列转发,使 ...

  8. Thrift 的五种工作模式

    一.thrift 共有5中工作模式,分成阻塞和非阻塞: 阻塞:TSimpleServer.TThreadPoolServer 非阻塞:TNonblockingServer.THsHaServer.TT ...

  9. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

    1. 前言 bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,这个IP核基本未变,可见这个IP核的设计是相当成熟的.本文所讲述的内容属于这个IP核的一部分,掌握了本文所讲内容,就可以 ...

随机推荐

  1. js (jQuery)分组数据

    function getobjArr (data) { var result = []; data.HELMET.system = '系统分类' // console.log(data) $.each ...

  2. 《JavaScript高级程序设计》笔记:在HTML中使用Javascript(二)

    script元素 向html页面中插入js的主要方法就是使用<script>元素.使用<script>元素的方式有两种:直接在页面中嵌入js代码和包含外部js文件.直接在页面中 ...

  3. P2590 [ZJOI2008]树的统计

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u ...

  4. Linux 新磁盘分区与挂载

      1.查看未分区的盘   2.新建分区   3.格式化分区(/dev/sdb1)   4.查看磁盘uuid [root@web-node1 ~]# blkid /dev/vdb1 /dev/vdb1 ...

  5. JAVA代码根据经纬度范围计算WGS84与谷歌全球墨卡托包含的切片数目与拼接图像像素尺寸

    根据项目需求编写的代码. 适用场景:在网络地图上,比如天地图与谷歌地图,用户用鼠标在地图上拉一个矩形框,希望下载该矩形框内某一层级的瓦片数据,并将所有瓦片拼接成一个完整的,包含地理坐标的tif图像. ...

  6. python 标准类库-数据类型之集合-容器数据类型

    标准类库-数据类型之集合-容器数据类型   by:授客 QQ:1033553122 Counter对象 例子 >>> from collections import Counter ...

  7. Testlink1.9.17使用方法( 第三章 初始配置[配置用户、产品] )

    第三章 初始配置(配置用户.产品) 一. 设置用户 QQ交流群:585499566 在TestLink系统中,每个用户都可以维护自己的私有信息.admin可以创建用户,但不能看到其它用户的密码.在用户 ...

  8. PyCharm 专业版激活方法

    郑重声明: JetBrains公司的PyCharm专业版是收费的,本文所述激活方法仅限于短时内体验和试用PyCharm专业版,使用后请当天立即删除.若需要继续使用PyCharm专业版,请在官网购买.当 ...

  9. JHipster开发环境安装

    本文演示如何在CentOS7上安装Jhipster以及其依赖组件. 这里采用官方推荐的Yarn安装方法,操作系统版本为CentOS 7.4. 1 安装JDK 推荐版本:OpenJDK 1.8.0-64 ...

  10. OSWatcher使用过程中小问题解决方法

    本文介绍一下在使用OSWatcher过程当中遇到的两个问题的解决方法.如有更好的方法,敬请留言. 1:OSWatcher在配置文件里面设置了参数OSW_COMPRESSION为gzip后,OSWatc ...