首先,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. idea代码提示,不区分大小写

    idea代码提示,不区分大小写:File-->Settings-->Editor-->General-->Code Completion-->Case sensitive ...

  2. PHP 无限极分类下拉列表实现

    1. 递归实现下拉列表 /** * @param 递归 实现下拉列表 分类 */ include('db.inc.php'); function getList($pid = 0,&$resu ...

  3. xshell工具source导入几个G的数据库

    直奔主题 xshell工具source导入几个G的数据库 1.先把sql文件通过ftp或者winscp上传到服务器对应站点根目录,如图所示 2.进入xshell界面,进入数据库之前一定设定编码,否者会 ...

  4. 洛谷P4302 [SCOI2003]字符串折叠(区间dp)

    题意 题目链接 Sol 裸的区间dp. 转移的时候枚举一下断点.然后判断一下区间内的字符串是否循环即可 `cpp #include<bits/stdc++.h> #define Pair ...

  5. 2018-11-04 在线代码离线翻译Chrome插件"一马"v0.0.14

    续前文: 在线代码离线翻译Chrome插件"一马"v0.0.8. 主要改进如下. 项目源码库: program-in-chinese/webextension_github_cod ...

  6. 2017-11-09 中英文代码对比系列之Java一例

    原文: https://zhuanlan.zhihu.com/p/30905033. 作者为本人. 这个系列将对同一段代码进行中文命名和英文命名两个版本的比较. 目的包括, 演示中文命名, 发现命名时 ...

  7. mybatis 自动生成文件配置

    maven 依赖配置: <!-- sql server --><dependency> <groupId>com.microsoft.sqlserver</g ...

  8. Android深入四大组件(九)Content Provider的启动过程

    前言 Content Provider做为四大组件之一,通常情况下并没有其他的组件使用频繁,但这不能作为我们不去深入学习它的理由.关于Content Provider一篇文章是写不完的,这一篇文章先来 ...

  9. Glide开源库的使用

    关于Glide Glide是一款快速高效的Android图像加载库,注重于平滑的滚动.Glide提供了易用的API,高性能.可扩展的图片解码管道(decode pipeline),以及自动的资源池技术 ...

  10. JAVA设计模式——代理(动态代理)

    传送门:JAVA设计模式——代理(静态代理) 序言: 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring ...