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

rabbitmqdoc

本文主要介绍关于java-rabbitmq,rabbitmq,java的知识点,对【RabbitMQ(一)【概述】】和【rabbitmqdoc】有兴趣的朋友可以看下由【Naijia_OvO】投稿的技

本文主要介绍关于java-rabbitmq,rabbitmq,java的知识点,对【RabbitMQ(一)【概述】】和【rabbitmq doc】有兴趣的朋友可以看下由【Naijia_OvO】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的RabbitMQ相关技术问题。

rabbitmq doc

为什么需要使用消息中间件

具体地说,中间件屏蔽了底层操作系统的复杂性,是程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担,中间件带给应用系统的,不i只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入

单体架构

存在的问题:

耦合度太高运维成本过高不宜维护服务器的成本高以及升级架构的复杂度也会增大

分布式架构

存在问题

学习成本过高,技术栈过多运维成本和服务器成本增高人员的成本增高项目的负载度上升面临的错误和容错性也会成倍增加占用的服务器端口和通讯的选择的成本高安全性的考虑和因素逼迫可能选择 RMI/MQ 相关的服务器通讯

好处

服务系统的独立,占用的服务器资源减少和占用的硬件成本减少系统的独立维护和部署,耦合度降低,可插拔性系统的框架和技术栈的选择可以变得灵活弹性的部署,不会造成平台因为部署造成的瘫痪和停服的状态

常见的消息中间件

ActiveMQ、RabbitMQ、Kafka、RocketMQ等

消息中间件的使用

利用可靠的消息传递机制进行系统和系统直接的通讯通过提供消息传递和消息的排队机制,它可以在分布式系统环境下扩展进程间的通讯

rabbitmq doc

rabbitmq doc

消息中间件的本质及设计

它是一种接收数据,接收请求、存储数据、发送数据等功能的技术服务

消息中间件的核心组成部分

消息的协议消息的持久化机制消息的分发策略消息的高可用、高可靠消息的容错机制 一、消息队列概述
1.1 消息队列协议

什么是协议

rabbitmq doc

所谓协议是指

计算机底层操作系统和应用程序通讯时共同遵守的一组约定,只有遵循共同的约定和规范,系统和底层操作系统之间才能相互交流和一般的网络应用程序的不同,它主要负责数据的接收和传递,所以性能比较的高协议对数据格式和计算机之间交换数据都必须严格遵守规范

网络协议的三要素

语法:语法使用户数据与控制信息的结构与格式,以及数据出现的顺序 语义:语义是解释控制信息每个部分的意义。它规定了需要发出任何控制信息,以及完成的动作与做出什么样的响应 时序:时序是对事件发生顺序的详细说明
1. 语法: http 规定了请求报文和响应报文的格式
2. 语义: 客户端主动发起请求称之为请求
3. 时序: 一个请求对应一个响应 (一定现有请求再有响应,这个是时序)

常见面试题:为什么消息中间件不直接使用 http 协议?

因为 http 请求报文头和响应报文头是比较复杂的,包含了COOKIE、数据的加密解密、状态码、响应码等附加的功能,但是对于一个消息而言,并不需要这么复杂,也灭有这个必要性,它其实就是负责数据传递、存储、分发就行,一定要追求的是高性能。尽量简洁,快速大部分情况下 http 都是短链接,在实际的几乎过程中,一个请求到响应很可能会中断,中断以后就不会进行持久化,会造成请求的丢失。这样就不利于消息中间件的业务场景,因为消息中间件可能是一个长期的获取消息的过程,出现问题和故障要对数据或消息进行持久化等,目的就是为了保证消息和数据的高可靠和稳健的运行

AMQP 协议

AMQP:(全程 Advanced Message Queuing Protocol)是高级消息队列协议。由于摩根大通集团联合其他公司共同设计。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同的开发语言等条件的限制

特性

分布式事务支持消息的持久化支持高性能和高可靠的消息处理优势

MQTT 协议

MQTT 协议(Message Queuing Telemetry Transport)消息队列是IBM开放的一个即时通讯协议,物联网系统架构中的重要组成部分

特点

轻量结构简单传输快,不支持事务没有持久化技术

应用场景

适用于计算能力有限低带宽网络不稳定的场景

OpenMessage 协议

是最近几年由阿里、雅虎和滴滴出行、Steamalio等公司共同参与与创立的分布式消息中间件、流处理等领域的应用开发标准

特点

结构简单解析速度快支持事务和持久化设计

Kafka 协议

Kafka 协议是基于 TCP/IP 的二进制协议,消息内部是通过长度来分割,由一些基本数据类型组成

特点

结构简单解析速度快无事务支持有持久化设计 1.2消息队列持久化

持久化

简单来说就是将数据存入磁盘,而不是存在内存中随服务重启断开而消失,使数据能够永久保存

rabbitmq doc

常用的持久化方式

ActiveMQRabbitMQKafkaRocketMQ文件存储支持支持支持支持数据库支持/// 1.3 消息的分发策略

MQ 消息队列有如下几个角色

生产者 存储消息 消费者

一般获取数据的方式无外乎"推"(push)或者"拉"(pull)两者方式,典型的就是 git 就有推拉机制,我们发送的 http 请求就是一种典型的拉取数据库数据返回的过程。而消息队列 MQ 是一种推送的过程,这些推机制会适用到很多的业务场景,也有很多对应推机制策略

消息分发策略的机制对比

ActiveMQRabbitMQKafkaRocketMQ发布订阅支持支持支持支持轮询分发支持支持支持/公平分发/支持支持/重发支持支持/支持消息拉取/支持支持支持 1.4 消息队列高可用和高可靠

什么是高可用机制

高可用:是指产品在规定的条件和规定的时刻或时间内处于可执行规定功能状态的能力

当业务量增加时,请求也过大,一台消息中间件服务器会触及硬件(CPU、内存、磁盘)的极限,一台消息服务器已经无法满足业务的需求,所以消息中间件必须支持集群部署,来达到高可用的目的

集群模式1 - Master-Slave 主从共享数据的部署方式

rabbitmq doc

解析:生产者将消费者发送到 Master 节点,所有的都连接这个消息队列共享这块数据区域,Master 节点负责写入,一旦 Master 挂掉,slave 节点继续服务。从而形成高可用

集群模式2 - Master-Slave 主从同步部署方式

rabbitmq doc

解析:这种模式写入消息同样在 Master 主节点上,但是主节点会同步数据到 slave 节点形成副本,和 zookeeper 或者 redis 总从机制很类同。这样可以达到负载均衡的效果,如果消费者有多个这样就可以去不同的节点进行消费,以为消息的拷贝和同步暂用很大的带宽和网络资源

集群模式3- Master-Slave 多主集群同步部署方式

rabbitmq doc

解析:和上面的区别不是很大,但是它的写入可以是任意节点去写入

集群模式4- Master-Slave 多主集群转发部署模式

rabbitmq doc

解析:如果你插入的数据是 broker-1中,元数据信息会存储数据的相关描述和记录存放的位置(队列)

它会对描述信息,也就是算数据信息进行同步,如果消费者在broker-2进行消费,发现自己没有对应的消息,可以从对应的元数据信息中去查询,然后返回对应的消息信息,场景:比如买火车票或者黄牛买演唱会门票,假如第一个黄牛有顾客说要买演唱会门票,如果该黄牛没有则他回去找另外的黄牛询问,如果有就返回

集群模式5 Master-Slave与 Broker-Cluster组合的方案

rabbitmq doc

解析:实现多主多从的热备机制来完成消息的高可用以及数据的热备机制,在生产规模达到一定的阶段的时候,这种使用的频率比较高

小结:要么消息共享,要么消息同步,要么元数据共享

高可靠机制

高可靠机制:系统可以无故障低持续运行,比如一个系统突然崩溃,报错,异常等等并不能影响线上业务的正常运行,出错的几率极低,就称之为:高可靠

在高并发的业务场景中,如果不能保证系统的高可靠,那造成的隐患和损失是非常严重的

保证消息中间件的可靠性可以从以下两方面考虑

消息的传输:通过协议来保证系统间数据解析的正确性 消息的存储可靠:通过持久化来保证消息的可靠性

本文《RabbitMQ(一)【概述】》版权归Naijia_OvO所有,引用RabbitMQ(一)【概述】需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • 讨伐Java多线程与高并发——MQ篇
    本文是学习Java多线程与高并发知识时做的笔记。这部分内容比较多,按照内容分为5个部分:多线程基础篇JUC篇同步容器和并发容器篇线程池篇MQ篇本篇 ... [详细]
  • 有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录。浏览器访问服务器的过程在用户访问网页时,不论是通过URL输入域名或I ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 一.常见基于身份识别进行反爬1通过headers字段来反爬headers中有很多字段,这些字段都有可能会被对方服务器拿过来进行判断是否为爬虫1.1通过headers中的User-A ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
  • ByteCTF 2019 WriteUp Kn0ck
    ByteCTF 2019 WriteUp Kn0ck ... [详细]
  • 这篇文章主要介绍PHP如何使用在全部作用域中始终可用的内置变量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要 ... [详细]
  • 最近在做一个项目,但是由于之前一个项目也同时部署在同一台tomcat下,所以出现了sessionId的冲突,描述一下冲突过程:1.打开浏览器访问第一个项目(配置在根目录)2.打开另一标签 ... [详细]
  • mac os php mysql_Mac OS下配置PHP+MySql环境
    由于最近需要布置mantis用来进行bug追踪,在此记录其过程。由于PHPapache环境在MacOS上是自带的,所以不需要另处下安装包, ... [详细]
author-avatar
ex7776647
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有