分布式应用解耦利器rabbitmq
消息能够使应用连接和扩展,作为分布式架构中一大组件使用,消息是异步的能够分离发送数据和接收数据,达到应用的解耦;
使用消息的基本特性是能够无阻塞的发送消息,异步化处理应用调用逻辑,基本模式发布订阅功能,或者是工作队列模式
rabbitmq 是一个消息代理中间件
rabbitmq有六种工作模式,简单模式,work模式,发布订阅模式、路由模式,主题模式,RPC,在项目实践中,rabbitmq的RPC功能一般不使用,有专业的RPC中间件替代,剩下的实质就两种模式较为广泛使用,work和订阅模式,根据需求的实际场景进行选择
如果消息是只允许一消费一次就用work模式,如果消息是允许指定的多消费者使用就使用直接、路由、主题模式
work模式:
当把消息封装到队列后,后台的任务进程从队列里那消息进行消费,后台可以跑多个任务进程,队列的消息对它们来说是共享的。
work模式有轮询分发和公平分发
轮询分发是通过轮询平均分发到后台消费者,这种方式如果由于其中一消费者进程处理缓慢会导致整体性能下降。
公平分发是通过确认每个消费者发送确认消息后才进行分发消息,这样能很好的平衡性能。通过设置int prefetchCount = 1;channel.basicQos(prefetchCount);完成
订阅模式:
work模式之允许发送消息给一个消费者,而订阅模式可以发送一个消息给多个消费者。
订阅模式是通过队列绑定到交换机,由交换机告诉生产者发送消息到指定队列。交换机的类型有fanout,direct、topic。
fanout交换机没有路由键值
direct交换机有唯一路由键值
topic交换机通过通配符指定路由键值,最灵活。使用最广泛!
通过消息通知管理和消息持久化保证消息不丢失:
当客户端任务进程拿到任务执行时有异常导致消失丢失,消息通知管理机制保证消息的不丢失,它是通过客户端发送确认消息通知rabbitmq的,如果发送端接收不到客户端的消失确认会马上重新发起消息。设置autoAck =false通过后台任务进程手动发送关闭消息,
而持久化能够保证rabbitmq退出或崩溃后消息不丢失。通过MessageProperties.PERSISTENT_TEXT_PLAIN设置持久化
rabbitmq集群
rabbitmq操作的所有数据和状态都可以复制到集群所有节点,除了队列
集群配置方式:通过客户端工具,配置文件声明
故障处理:可以任意启动和停止集群各阶段,不建议在wlan进行集群,推荐在lan中进行
硬盘还是内存:虽然内存节点能使交换机、队列、提高性能,但不可靠,推荐所有节点为硬盘节点。
相同的Erlang Cookie确保集群所有节点的互相通信
通过负载均衡器连接rabbitmq集群,如:HAProxy
来源:https://blog.csdn.net/sz6554/article/details/54880649
分布式应用解耦利器rabbitmq相关推荐
- 观察者模式——解耦利器
观察者模式是一个使用率非常高的模式,常用于 订阅--发布系统. 其 最重要的作用就是 解耦,将观察者和被观察者解耦,让他们之间的依赖性更小.具体应用也就是说 让 UI层 和具体的业务逻辑解耦. 看计算 ...
- RabbitMQ 面试题目整理
136.rabbitmq 的使用场景有哪些? MQ是一个互联网架构中常见的解耦利器. 什么时候不使用MQ? 上游实时关注执行结果 什么时候使用MQ? 1)数据驱动的任务依赖 2)上游不关心多下游执行结 ...
- RabbitMQ 如何确保消息的成功投递?幂等性?顺序性?
RabbitMQ 如何确保消息的成功投递?RabbitMQ 如何保证不重复消费,保证数据不丢失?分布式系统里,如何保证数据的一致性?一串连环炮你是否顶得住? 其实这几个问题的原理大同小异,都可以在统一 ...
- docker安装rabbitMQ
1. rabbitMQ介绍 RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的 ...
- 使用EasyNetQ组件操作RabbitMQ消息队列服务
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...
- Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka
一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,Rabbit ...
- RabbitMQ之五种消息模型
首先什么是MQ MQ全称是Message Queue,即消息对列!消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息.因为消息的生产和消费都是异步的,而 ...
- 《沈剑架构师训练营》第7章 - 架构解耦
34.解耦:配置中心,与配置架构演进. no34:配置文件架构有什么核心痛点? 1.上游痛:扩容的是下游,改配置重启的是上游(耦合,典型反向依赖) 2.下游痛:不知道谁依赖于自己(难以实施服务治理) ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
最新文章
- 目前学什么专业的人在搞SLAM?各有什么优势?
- python seek tell_PYTHON学习14.09:Python seek()和tell()函数详解
- 五一好礼70份免费送:示波器、开发板、焊台等!
- Linux下MPlayer的安装
- java service 事物_Service 事务(JdbcUtils 升级)
- 9月26日云栖精选夜读:阿里Java代码规约插件即将全球首发,邀您来发布仪式现场...
- aps后缀是什么文件_今日份知识分享:什么是源文件?
- [BuildRelease]Mozilla Build Tools - Autoconf + GNU Make
- php的字符串替换函数,php字符串替换函数
- 直播内容抢先看|基于 AUTOSAR 技术的 SOA 软件平台实践
- 地图制图基础(一):地图的分类
- fgo7.27服务器维护,【FGO日服】维护通知(7/12)
- vue element-plus 插件
- Web前端之HTML+CSS的知识总结
- python为自己龟蜗速更新的小说生成词云
- 在QQ群和QQ空间中挂马
- 搭建go开发环境时,出现GoSublime error: MarGo build failed的问题
- 手机连接Linux教程,手机密钥连接linux主机
- Linux命令修改文件名和文件夹名
- 手机上4G和WIFI情况下抓包总结
热门文章
- 深入理解计算机系统 第三章笔记,《深入理解计算机系统》笔记.PDF
- go io.reader 多次读取_Go 经典入门系列 24:Select
- mysql show timestamp_mysql中 datatime与timestamp的区别说明
- 画验证曲线_数学老师用“函数曲线”绘出美图 学生舍不得擦
- Android互联网访问,get方式,post方式等方式
- pmbook 知识领域 第六版_PMP项目管理10大知识领域脑图
- 文件上传获取file的全路径名_Java中的File类与I/O流
- MySQL 随笔记录
- 小程序实现长按删除图片
- 一个简单的MVP模式案例