热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RabbitMQ的基础知识与使用

一.MQ引言1.1MQ是什么?MQ(MessageQuene),翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消

一.MQ引言1.1MQ是什么?MQ(Message Quene),翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断从队列获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松实现系统间解耦。别名:消息中间件,通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。1.2MQ有哪些?ActiveMQ,RabbitMQ,kafka(Apache),RocketMQ(阿里)等。1.3不同MQ的特点ActiveMQ
ActiveMQ是Apache出品的最流行的,完全支持JMS(Java Message Service)的消息中间件,有丰富的API,但是性能受限,吞吐量并不高。
Kafka
Kafka目前属于Apache下的顶级项目,它追求高吞吐量,追求高效率。设计之初是为了用在大数据领域做日志的收集和传输,但是对消息的事务,一致性方面并没有很好。
RocketMQ
RocketMQ属于阿里的开源消息中间件,纯Java编写的,具有高吞吐,高可用的特性,它的设计起源与kafka,但并不是对kafka的copy,它对消息的可靠传输以及事务做了优化。目前被应用到阿里集团的交易,充值,流计算,消息推送,日志流处理等场景。
开源版本已经交给Apach托管,但是不支持事务,需要购买其官方版本才提供这个服务。
RabbitMQ
使用Erlang语言(1991年由爱立信公司提出的第一个版本,目前适用于linux,windows,unix等主流系统)开发,处理并发时性能不错,而且基于AMQP协议(JMS和AMQP的区别 https://blog.csdn.net/hpttlook/article/details/23391967)
可以和spring框架做默认对接,spring框架默认支持RabbitMQ
最重要的一点是RabbitMQ对数据的一致性,稳定性和可靠性支持性很高
数据一致性:RabbitMQ > kafka
吞吐量: kafka > RabbitMQ
二.RabbitMQ是什么?1.RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。一些基础的应用场景:①:登录/修改密码 成功,登录用户要收到短信 1对1②:淘宝/京东下订单后,通知库房,积分变动,物流系统等等,一对多③:日志系统:对于info,warning,error不同级别日志系统的处理。

在这里插入图片描述
2.RabbitMQ的几种模型 https://www.rabbitmq.com/
在这里插入图片描述

三.多种模式1.点对点模式2.工作队列模式默认平均分配,若要实现能者多劳的效果,需要①:关闭自动确认 channel.basicConsume("work", false, new DefaultConsumer(channel) {}②:channel.basicQos(1);//一次只接收一条消息③:channel.basicAck(envelope.getDeliveryTag(), false);//每次执行完任务手动确认

在这里插入图片描述

3.发布订阅模式
订阅了此channel的队列都能收到消息4.Routing之订阅模型(direct)在不同的场景下,我们希望不同的消息被不同的队列消费,这时就用到Direct类型的Exchange。在Direct模型下:①:队列与交换机的绑定不能再是任意绑定了,而是要指定一个RoutingKey(路由key)②:消息再向交换机发送消息时,也必须指定消息的RoutingKey③:交换机不再把消息交给每一个绑定的队列,而是根据路由key进行判断,只有消息的路由key与队列的路由key完全一致,才会接收到消息5.Routing之订阅模型(Topic)Topic类型的交换机和Direct类型的相比,都可以根据RoutingKey把消息路由到不同的队列,只不过Topic类型的交换机在定义RoutingKey的时候支持使用通配符。*:代表匹配一个 例如:user.info.save user.info.delete 都可以被RoutingKey为 *.info.*的交换机接收到#:代表匹配多个 例如:user.info.save user.info user 都可以被RoutingKey为 user.#的交换机接收到

推荐阅读
  • 讨伐Java多线程与高并发——MQ篇
    本文是学习Java多线程与高并发知识时做的笔记。这部分内容比较多,按照内容分为5个部分:多线程基础篇JUC篇同步容器和并发容器篇线程池篇MQ篇本篇 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
    每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ... [详细]
  • Windows系统 查询已开通的端口号和对外开放端口号
    查询端口号开放情况:查看该端口被那个PID所占用;方法一:有针对性的查看端口,使用命令:netstat–ano|findstr“”netstat-a对外开放端口号参考ht ... [详细]
  • 新版全能音乐转换器正式上线支持:kgmakwmqmc3qmcoggkgmmflac一键转换MP3格式支持MAC系统和windows系统使用测试版公开发布Win ... [详细]
  • celery 爬虫使用
    简介celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它由三部分组成,消息中间件, ... [详细]
  • 前言最近一段时间在整公司项目里一个功能的优化,用到了多线程处理。期间也是踩了不少的坑,在这里想说下我遇到的问题和注意事项。以及怎样知道启动的那些多线程都 ... [详细]
author-avatar
欧阳火凡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有