RabbitMQ学习笔记(一、消息中间件基础)
目录:
- 什么是消息中间件
- 消息中间件的作用
- JMS规范
- AMQP协议
- RabbitMQ简介
- Hello World
什么是消息中间件:
消息中间件(Message Queue Middleware,简称MQ),它是一个利用高效可靠的传递机制进行与平台无关的数据交流的工具。
目前比较主流的MQ有RabbitMQ、Kafka、RocketMQ、ActiveMQ。

消息中间件的作用:
1、异步(解决不必要的阻塞):MQ允许将一些消息放入到中间件中,但又并不是立即处理它,而是等需要的时候再去消费它。
2、解耦(减低模块之间的耦合度):MQ在处理中插入了一个隐含的、基于数据的接口层;就像家里的电器(如冰箱、烤炉、热水器等),它们并不是直接接在电路上的,而是通过插座达到通电的目的。
3、削峰(峰值任务的平滑处理):在访问量剧增的情况下,应用仍需要发挥作用。
4、冗余(存储、补偿机制):有些情况下,处理数据的过程中可能会失败,导致数据丢失;你可以在操作数据前先持久化一份到MQ中,然后等数据处理完成后再删掉这一数据,这样便规避了数据丢失的风险。
5、分布式消息传递:因为分布式的可用性、可靠性、吞吐量高、响应时间快、跨平台等特性,所以MQ非常适合分布式应用之间的消息传递。
JMS规范:
JMS(Java Message Service)规范,它本质上是一套API,仅适用于Java平台上的消息规范;并且通过标准的生产、发送接口来简化企业的开发。
1、JMS对象模型包含的元素
- 连接工厂:用于创建一个JMS连接
- JMS连接:客户端和服务端之间的连接
- JMS会话:客户端和服务端之间的会话,基于JMS连接
- JMS目的:JMS消息队列,也就是消息的目的地
- JMS生产者:生成消息的对象
- JMS消费者:消费消息的对象
- Broker:MQ的实例
2、JMS消息模型
- Point To Point(点对点):一个消息只有一个消费者能够消费,当消费成功后该条消息就会从MQ中删除。
- Publish/Subscribe(发布/订阅 >>> 一对多):发布到topic的消息会被所有当前主题的订阅者消费。
AMQP协议:
AMQP(Advance Message Queuing Protocol)协议是一套开放的MQ标准,支持不同语言的不同的MQ产品。
AMQP组件:
1、生产、消费者。
2、消息:包括有效载荷与标签;有效载荷:需要传输的数据;标签:描述有效载荷的属性;RabbitMQ通过标签决定谁改获得该消息,而消费者只能得到有效载荷。
3、信道:它是一个虚拟的连接,建立在真实的TCP、IP连接之上,所有的AMQP都通过信道传输消息;因建立TCP、IP连接非常消耗服务器资源,所以才有了信道的出现,它有点像连接池的那种感觉。
4、交换器、队列、绑定、路由键:队列通过路由键绑定到交换器,生产者把消息发送到交换器,交换器再根据绑定的路由键把消息路由到对应的队列中,然后再由订阅该消息的消费者进行消费。

RabbitMQ简介:
RabbitMQ是一款遵循AMQP规范的MQ,其具有消息确认机制、队列消息的持久化、消息拒收机制、默认交换器、mandatory(防丢失机制)。
Hello World:
见https://github.com/mrjdrs/rabbitmq-demo.git的rabbitmqhelloWorld。
RabbitMQ学习笔记(一、消息中间件基础)的更多相关文章
- js学习笔记:webpack基础入门(一)
		之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ... 
- Java学习笔记:语言基础
		Java学习笔记:语言基础 2014-1-31 最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ... 
- RabbitMQ学习笔记(五) Topic
		更多的问题 Direct Exchange帮助我们解决了分类发布与订阅消息的问题,但是Direct Exchange的问题是,它所使用的routingKey是一个简单字符串,这决定了它只能按照一个条件 ... 
- 卷积神经网络(CNN)学习笔记1:基础入门
		卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01 | In Machine Learning | 9 Comments | 14935 Vie ... 
- RabbitMQ学习笔记1-hello world
		安装过程略过,一搜一大把. rabbitmq管理控制台:http://localhost:15672/ 默认账户:guest/guest RabbitMQ默认监听端口:5672 JAVA API地 ... 
- (转) Rabbitmq学习笔记
		详见原文: http://blog.csdn.net/shatty/article/details/9529463 Rabbitmq学习笔记 
- 官网英文版学习——RabbitMQ学习笔记(十)RabbitMQ集群
		在第二节我们进行了RabbitMQ的安装,现在我们就RabbitMQ进行集群的搭建进行学习,参考官网地址是:http://www.rabbitmq.com/clustering.html 首先我们来看 ... 
- 官网英文版学习——RabbitMQ学习笔记(一)认识RabbitMQ
		鉴于目前中文的RabbitMQ教程很缺,本博主虽然买了一本rabbitMQ的书,遗憾的是该书的代码用的不是java语言,看起来也有些不爽,且网友们不同人学习所写不同,本博主看的有些地方不太理想,为此本 ... 
- RabbitMQ学习笔记五:RabbitMQ之优先级消息队列
		RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ... 
- 「学习笔记」字符串基础:Hash,KMP与Trie
		「学习笔记」字符串基础:Hash,KMP与Trie 点击查看目录 目录 「学习笔记」字符串基础:Hash,KMP与Trie Hash 算法 代码 KMP 算法 前置知识:\(\text{Border} ... 
随机推荐
- ORA-12505
			tomcat 连不上 oracle,报: java.sql.SQLException: Listener refused the connection with the following error ... 
- redhat 安装 oracle中途遇到的问题(1)
			(1)安装到68%时出现弹出框 Error in invoking target 'install' of makefile '/home/oracle/app/oracle/product/11.2 ... 
- 初学Python:Python的发展历史及下载安装
			Python作为一种计算机程序设计语言,自20世纪90年代初诞生至如今被人们逐渐悉知,经过版本更新以及功能添加,已广泛应用于各种独立的.大型项目的开发.Python 已经成为最受欢迎的程序设计语言之一 ... 
- Batchnorm原理详解
			Batchnorm原理详解 前言:Batchnorm是深度网络中经常用到的加速神经网络训练,加速收敛速度及稳定性的算法,可以说是目前深度网络必不可少的一部分. 本文旨在用通俗易懂的语言,对深度学习的常 ... 
- Yii2处理密码加密及验证
			在Yii2中提供了密码加密以及验证的一系列方法,方便我们的使用,它使用的是bcrypt算法.查看源码我们可以发现它使用的是PHP函数password_hash()和crypt()生成. 加密: /** ... 
- Mybatis框架模糊查询+多条件查询
			一.ISmbmsUserDao层 //根据姓名模糊查询 public List<Smbms> getUser(); //多条件查询 public List<Smbms> get ... 
- LeetCode 387: 字符串中的第一个唯一字符	 First Unique Character in a String
			题目: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. Given a string, find the first non-repeating charact ... 
- IT兄弟连 Java语法教程 数组 经典案例
			案例需求: 编程实现双色球中奖号码的生成 1)应用知识: ● 数组的声明 ● 数组的使用 ● for循环 2)需求解析: 在该程序中,需要定义一个长度为7的数组,用来存储中奖号码,使用Rando ... 
- linux系列之常用运维命令整理笔录
			目录 本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍 ... 
- -ffast-math编译选项作用
			https://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-do 
