RABBITMQ详解(一)------简介与安装(DOCKER)

刚刚进入实习,在学习过程中没有接触过MQ,RabbitMQ 这个消息中间件,正好公司最近的项目中有用到,学习了解一下.

首先什么是MQ:

MQ(message queue) : MQ是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求。

MQ基本概念:

  1. 消息(Message)

    消息是MQ中最小的概念,本质上就是一段数据,它能被一个或者多个应用程序所理解,是应用程序之间传递的信息载体.

  2. 队列(Queue)

    1. 本地队列

      本地队列按照功能可划分为初始化队列,传输队列,目标队列和死信队列.

      1. 初始化队列用作消息触发功能.

      2. 传输队列只是暂存待传的消息,条件许可的情况下,通过管道将消息传送到其他队列管理器.

      3. 目标队列是消息的目的地,可以长期存放消息.

      4. 如果消息不能送达目标队列,也不能再路由出去,则被自动放入死信队列保存.

    2. 别名队列远程队列

      只是一个队列定义,用来指定远程队列管理器的队列.使用了远程队列,程序就不需要知道目标队列的位置.

    3. 模型队列

      模型队列定义了一套本地队列的属性结合,一旦打开模型队列,队列管理器会按照这些属性动态地创建出一个本地队列.

  3. 队列管理器(Queue Manager)

    队列管理器是一个负责向应用程序提供消息服务的机构,如果把队列关系器比作数据库,那么队列就是其中的一张表.

  4. 通道(Channel)

    通道是两个管理器之间的一种单向点对点的通信连接,如果需要双向交流,可以建立一对通道.

  5. 监听器(Listener)

MQ产品的特性:

  1. 可靠性传输

    对于应用来说,只要成功把数据提交给消息中间件,那么关于数据可靠传输的问题就由消息中间件来负责.

  2. 不重复传输

    不重复传输就是断点续传的功能,特别适合网络不稳定的环境,节约网络资源.

  3. 异步性传输

    异步性传输是指,接受消息双方不必同时在线,具有脱机能力和安全性.

  4. 消息驱动

    接到消息后主动通知消息接收方.

  5. 支持事务

    目前MQ也广泛被一些企业用于分布式事务的同步.

常用的场景:

  1. 消息通道

  2. 消息总线机制

    在如今的SOA架构或者微服务架构中,普遍使用.各个服务之间的通信,可以确保数据的一致性.

常见的MQ对比:

见此处


RabbitMQ

话题回归.RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用Erlang实现的工业级消息队列(MQ)服务器.

  1. AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制.

  2. 开源.

  3. 使用Erlang语言编写,这是一种面向并发的编程语言,目的是创造一种可以应对大规模并发活动的编程语言和运行环境.


安装

  1. 安装Docker.

  2. Docker搜索Rabbitmq镜像.

    docker search rabbitmq
    

  3. 我们选择官方版本的,也就是第一个.通过这个镜像创建的容器需要我们额外打开web management的插件,若不想手动开启,可下载 rabbitmq/management

    docker pull rabbitmq
  4. 镜像下载后,通过该镜像创建一个容器.

    docker run -d --hostname my-rabbit -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 -p 25672:25672 -p 4369:4369 -v $PWD/rabbitmq-data:/var/rabbitmq/lib --name my_rabbitmq rabbitmq:latest

    参数介绍:

    -d:后台运行容器.

    --hostname:指定主机名.

    -p:指定端口映射.

    -v:文件目录映射.

    --name:定义容器名称.

  5. 查看日志.

    docker logs my_rabbitmq
  6. 如果使用的镜像为rabbitmq/management,到此步可直接浏览器访问localhost:15672;若使用rabbitmq镜像,我们需要进入docker,开启rabbitmq-management插件.

    docker exec -it my_rabbitmq /bin/bash
    ls

    可以看到有plugins插件的目录,我们需要用到的插件都在里面,使用命令即可开启插件.

    cd plugins
    rabbitmq-plugins enable rabbitmq_management

  7. 这样,我们在本地就可以打开浏览器访问localhost:15672,便可以看到Rabbit的页面了.其中用户名和密码都是guest.

RabbitMQ详解(一)------简介与安装(Docker)的更多相关文章

  1. .Net使用RabbitMQ详解 转载http://www.cnblogs.com/knowledgesea/p/5296008.html

    .Net使用RabbitMQ详解   序言 这里原来有一句话,触犯啦天条,被阉割!!!! 首先不去讨论我的日志组件怎么样.因为有些日志需要走网络,有的又不需要走网路,也是有性能与业务场景的多般变化在其 ...

  2. Spring Boot(八):RabbitMQ详解

    Spring Boot(八):RabbitMQ详解 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件在互联网公司的使用中越来越多 ...

  3. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  4. Hadoop 发行版本 Hortonworks 安装详解(二) 安装Ambari

    一.通过yum安装ambari-server 由于上一步我们搭建了本地源,实际上yum是通过本地源安装的ambari-server,虽然也可以直接通过官方源在线安装,不过体积巨大比较费时. 这里我选择 ...

  5. 执行对象Statement、PreparedStatement和CallableStatement详解 JDBC简介(五)

    执行对象是SQL的执行者,SQL是“安排好的任务”,执行对象就是“实际工作的人”. 执行对象有三种: Statement.PreparedStatement和CallableStatement,他们都 ...

  6. spring-boot(五) RabbitMQ详解 定时任务

    学习文章来自:springboot(八):RabbitMQ详解 springboot(九):定时任务 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分 ...

  7. RabbitMQ详解(三)------RabbitMQ的五种模式

    RabbitMQ详解(三)------RabbitMQ的五种模式 1.简单队列(模式) 上一篇文章末尾的实例给出的代码就是简单模式. 一个生产者对应一个消费者!!! pom.xml ​ 必须导入Rab ...

  8. 详解npm的模块安装机制

    详解npm的模块安装机制 依赖树表面的逻辑结构与依赖树真实的物理结构 依赖树表面的逻辑结构与依赖树真实的物理结构并不一定相同! 这里要先提到两个命令:tree -d(linux)和npm ls(npm ...

  9. RocketMQ详解(二)安装使用详解

    专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...

随机推荐

  1. PyCharm导入tensorflow包报错的问题

    [注]PyCharm导入tensorflow包报错的问题 若是你也遇到这个问题,说明你也没有理解tensorflow到底在哪里. 当安装了anaconda3.6后,在PyCharm中设置interpr ...

  2. css实现简单几何图形

    前言:你知道吗?用代码就可以做出三角形.圆形.扇形等等这些几何图形呦.快过来一探究竟吧! 页面上一些简单的图形,如三角形.圆形等等,除了用图片来实现,我们还可以用css的border属性来实现,不仅减 ...

  3. OC中分类(Category)和扩展(Extension)

    1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...

  4. train_test_split, 关于随机抽样和分层抽样

    https://zhuanlan.zhihu.com/p/49991313 在将样本数据分成训练集和测试集的时候,应当谨慎地考虑一下是采用纯随机抽样,还是分层抽样. 通常,数据集如果足够大,纯随机抽样 ...

  5. 洛谷P2322 最短母串问题 [HNOI2006] AC自动机

    正解:AC自动机+最短路 解题报告: 传送门! 这题之前考试考到辣,,,我连题目都没看懂这种傻逼事儿就不要说了QAQ 然后就港正解辣 首先这题可以用dp做?等下写 但是一般来说看到这种,第一反应就,先 ...

  6. 如何bitbucket上删除项目

    老外网页操作习惯不同,删除项目的按钮,我花了半天,突然瞟到delete,如下图(真他妈的隐蔽,记住这2017/3/7):

  7. Eclipse安装aptana

    1.下载aptana包 http://update.aptana.com/update/studio/3.2/ aptana_update_024747.zip(包) 2.安装插件包 解压该文件,解压 ...

  8. Java - Spring AOP 拦截器的基本实现

    一个程序猿在梦中解决的 Bug 没有人是不做梦的,在所有梦的排行中,白日梦最令人伤感.不知道身为程序猿的大家,有没有睡了一觉,然后在梦中把睡之前代码中怎么也搞不定的 Bug 给解决的经历?反正我是有过 ...

  9. 查找第K小的元素(利用中位数线性时间选择)(C)

    找任意第k个小的元素 #include <stdio.h> #include <stdlib.h> #include <ctime> #include <io ...

  10. PythonWeb 开发记录(一)

    安装Django Sudo apt-get install python-django 验证安装Django成功 创建Django应用程式的方式 创建的是解决方案 ,然后创建的是Hi 模块 运行项目: ...