热门标签 | 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.#的交换机接收到

推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 性能测试工具的选择与应用
    本文探讨了性能测试工具的重要性及其在软件测试中的作用,重点介绍了选择合适性能测试工具的考量因素,并对几种常用的性能测试工具进行了对比分析。 ... [详细]
  • window下kafka的安装以及测试
    目录一、安装JDK(需要安装依赖javaJDK)二、安装Kafka三、测试参考在Windows系统上安装消息队列kafka一、安装JDKÿ ... [详细]
  • 本文介绍如何在Linux系统中卸载预装的OpenJDK,安装指定版本的JDK 1.8,并配置防火墙以确保系统安全性和软件兼容性。 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 本文深入探讨Java编程语言的关键特性,包括但不限于其简洁性、强大的面向对象能力、跨平台兼容性、安全机制、高效性能及多线程支持等方面。文章旨在为开发者提供全面理解Java特性的指导。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • java程序员_Java程序员最新职业规划,逆袭面经分享
    java程序员_Java程序员最新职业规划,逆袭面经分享 ... [详细]
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社区 版权所有