1、什么是MQ?优劣势有那些?

  • MQ是在消息的传输过程中保存的消息的容器,多用于分布式系统之间进行通信

    • MQ,是一种跨进程的通信机制,用于上下游传递消息在互联网架构中
    • MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务使用了MQ之后
    • 消息发送上游只需要依赖MQ,不用依赖其他服务。

优势

  • 应用解耦:减少程序的耦合程度,进而提高系统的维护性

    • 提高容错性和可维护性
  • 异步提速:提升系统的性能
    • 提升用户体验和系统吞吐量
  • 削峰填谷:减少高峰时期的并发请求的压力,提高系统的稳定性
    • 提高系统稳定性

劣势

  • 系统可用性降低
  • 系统复杂度提高

2、JMS和AMQP的区别是?

  • JMS即Java消息服务应用程序接口,是一个Java平台中关于面向消息中间件的API
  • AMQP一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计
  • 通信平台的区别
    • JMS: 只允许基于JAVA实现的消息平台的之间进行通信
    • AMQP: 允许多种消息协议进行通信,比如ruby的storm和java的jms都可以在AMQP上进行通信。

结论: AMQP允许多种技术同时进行协议通信

  • 通信机制的区别

    • JMS:消息生产者和消息消费者必须知道对方的Queue
    • AMQP: 消息生产者和消息消费者无须知道对方的Queue,消息生产者将Exchange通过Route key和任意Queue绑定。

消息消费者通过Route key从任意Queue中获取Exchange

消息传输机制的区别

  • JMS:JMS支持PTP和publis/subscribe机制,PTP只可以点对点通信,public/subscribe在一端发出请求后所有其他端收到消息
  • AMQP:
    • 所有RouteKey相同的Queue接受到数据
    • 所有相同的Exchange的Queue接受到数据
    • 所有wilecard的Exchange的Queue接受到数据
    • 可以让webservice等接受到数据

3、如何docker安装rabbitmq?

  • docker search rabbitmq
  • docker pull rabbitmq:3-management
  • docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

4、rabbitmq有几种工作模式?他们的区别是?

简单队列模式

  • 不用显示声明交换机,只需声明一个队列
  • 生产者指定队列名发送消息给MQ,然后会有一个默认的交换机将消息转发给这个队列。
  • 消费者负责监听这个队列,一有消息就会得到通知做出响应

工作队列模式(Work queues)

  • 和简单队列模式基本一样,不过有一点不同,该模式有多个消费者在监听队列
  • rabbitmq会以轮询的方式将消息发给多个消费者确保一条消息只会被一个消费者消费

发布订阅模式(Publish/subscribe)

  • 和上面2种模式默认提供交换机不同的是,该模式需要显示声明交换机,
  • 然后可以创建多个队列和这个交换机进行绑定。
  • 生产者发消息给MQ时需要指定交换机,然后交换机将消息转发给与自己绑定的所有队列
  • 消费者监听指定的队列获得消息。每个队列可以有多个消费者监听,同样也是以轮询的机制发给消费者。

Routing 模式

  • 和发布订阅模式不同的是,队列绑定交换机时需要指定一个routingkey
  • 那么生产者发送消息时不仅需要指定交换机还需要指定routingkey
  • 这样的话交换机就会把消息转发给跟自己绑定并且routingkey相匹配的队列

Topic模式

  • 和Routing模式唯一的不同就是可以设置带有通配符进行模糊匹配的routingkey

heard模式

  • 和Routing模式的不同就是 取消了routing 使用键值对的方式作为routing

5、如何使用原生API发送消息?

  • 创建连接工厂
  • 设置连接MQ的参数
  • 创建连接
  • 创建队列
  • 发送消息
  • 释放资源

6、如何使用原生API接收消息?

  • 创建连接工厂
  • 设置连接MQ的参数
  • 创建连接
  • 创建连接的管道
  • 创建队列(声明队列的名称和设置基本信息)
  • 接受消息

7、SpringBoot如何集成Rabbitmq?如何发送消息和如何接收消息?

发送消息

  • 导入RabbitMQ的maven依赖
  • 定义配置类
  • 配置连接MQ的基本参数
  • 注入RabbitTemplate
  • 调用发送方法

接收消息

  • 定义类监听消息
  • 在类的方法上面加上@RabbitListener(queues = “要监听的队列名称”)
  • 方法的参数message获取队列的消息

RaabitMQ灵魂拷问相关推荐

  1. 灵魂拷问:你看过Xgboost原文吗?

    Datawhale 作者:小雨姑娘,Datawhale成员 事情的源头是这样的,某日我分享了一篇阿里机器学习工程师面试失败经历,其中提到了我回答关于Xgboost的部分,评论区的老哥就开始了灵魂拷问: ...

  2. 旷视唐文斌:你到底给谁创造了什么样的价值?AI产品灵魂拷问

    落地,是2019年AI行业的共同话题,创造价值.降本增效,成为行业共识. 作为AI头雁公司.也即将成为AI创业第一股的旷视,又是怎样看待落地这个话题的? 而作为一位技术领袖,旷视联合创始人兼CTO唐文 ...

  3. 旷视唐文斌:你到底给谁创造了什么样的价值?这是AI产品的灵魂拷问丨MEET2020...

    郭一璞 整理自 MEET2020智能未来大会  量子位 报道 | 公众号 QbitAI 落地,是2019年AI行业的共同话题,创造价值.降本增效,成为行业共识. 作为AI头雁公司.也即将成为AI创业第 ...

  4. 无惧灵魂拷问!淘宝扫一扫助你不再扔错垃圾!

    自7月1日上海正式实行垃圾分类开始 魔都人民天天经受着这样的灵魂拷问 你是什么垃圾? 面对有史以来最严的垃圾分类(个人扔错最高罚款200) 机智的魔都人民也是八仙过海,各显神通 面对这样的情况,此等情 ...

  5. 前端要懂mysql_【灵魂拷问】你真的懂得Mysql的管理和使用吗?

    作者 | Jeskson 来源 | 达达前端小酒馆 MySQL管理,数据库管理和数据表管理,用户管理. 初始化数据库,创建数据库,查看数据库,删除数据库. 创建数据表,查看数据表,修改数据表,删除数据 ...

  6. 其利断金前一句是什么_绍兴晚报丨裘亚黎说|围城外的灵魂拷问:人为什么要结婚?...

    裘亚黎说 "人为什么要结婚?" 在我们婚恋服务这行中,这样的困惑从未缺席.不缺钱.不缺玩伴.有房有车,我,为什么要找个人来添堵,有了孩子后很可能变成两个人添堵. 这算得上是一个灵魂 ...

  7. java 字符串赋值_灵魂拷问:为什么 Java 字符串是不可变的?

    在逛 programcreek 的时候,发现了一些精妙绝伦的主题.比如说:为什么 Java 字符串是不可变的?像这类灵魂拷问的主题,非常值得深思.对于绝大多数的初级程序员来说,往往停留在"知 ...

  8. 大规模集群故障处理,能抗住这3个灵魂拷问算你赢

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 我相信每一个集群管理员,在长期管理多个不同体量及应用场景的 ...

  9. 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?

    目录 引入 C++ 编译器对除法的优化 Java 编译器对除法的优化 移位运算对应的字节码 除法操作对应的字节码 查看及分析 JIT 即时编译结果 1.手动编译 OpenJDK 2.编译 hsdis- ...

最新文章

  1. UI第九节——UIProgressView
  2. Andriod anim 补间(Tween)动画与Interpolator以及setCustomAnimations方法
  3. toString()与new String ()用法区别
  4. linux命令(8)kill命令
  5. SpringBoot2.1.5 (21)---使用 devtools 热部署
  6. python字符串添加元素_python向字符串中添加元素的实例方法
  7. [转]Java jdbc数据库连接池总结!
  8. Prototype使用Form操作表单
  9. vb杨辉三角代码编写_杨辉三角怎样用VB写杨辉三角的完整代码 – 手机爱问
  10. 当前GitHub上排名前十的热门Vue项目
  11. Mit6.S081-实验4-Traps
  12. JavaScript实现大数据(条形统计图表)
  13. 惠普电脑u盘重装系统步骤_惠普电脑如何重装系统?惠普电脑用U盘重装win10系统教程...
  14. littlevgl抗锯齿_「VGL」Littlevgl 显示汉字 - seo实验室
  15. python 实时股票行情_python 实时获取股票行情脚本
  16. 管道通信的基本流程和代码
  17. Java中IO流-18-flush和close方法的区别
  18. 乐得瑞PD快充方案可解Surface充电燃眉之急——专业PD方案厂家
  19. http://blog.csdn.net/anxpp/article/details/52108238
  20. 海信IP108H_S905L2_免拆_U盘卡刷固件包

热门文章

  1. python程序命令行输出记录到log文件中
  2. 网络应用程序Web3.0概述
  3. Ubuntu16卸载firewalld
  4. 最小二乘法和最大似然法
  5. java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...
  6. 2021年Java社招面试题,2021大厂面试合集
  7. 避免骚扰用户?硅谷这样打造移动推送通知!
  8. linux 解压iso文件后挂载live系统
  9. 项目文章解读 | DNA低甲基化介导的桂花衰老
  10. 远行星号java 出错_按照教程搞了一条新船,但是出错了,求大神看看怎么回事...