RabbitMQ基本概念和原理

1.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

2.RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写。

3.Channel

Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

4.Exchange(生产者将消息发送到Exchange(交换器),由Exchange将消息路由到一个或多个Queue中(或者丢弃),RabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种)

5.Queue(RabbitMQ的内部对象,用于存储消息)

6.基本工作原理

客户端(生产者) send Message -->Exchange (交换机通过不同的类型将消息保存到对应的queue)-->Queue

客户端(消费者)通过订阅来消费queue中的消息。

以上基础概念整理来源于 RabbitMQ基础概念详细介绍

在Windows系统中安装RabbitMQ

1. 下载安装erlang (我用的是otp_win64_19.3版本)

下载地址 (根据操作系统选择32还64位)

2. 下载安装rabbitmq-server(我用的是rabbitmq-server-3.6.10版本)

下载地址

安装好后,在看装目录下看到

接下来用启用DOS命令

a. cd 到sbin目录下,我的安装目录是D:\RabbitMQServer\rabbitmq_server-3.6.10\sbin, 输入D: 回车,cd RabbitMQServer\rabbitmq_server-3.6.10\sbin

b. 查看安装是否成功命令 :rabbitmqctl status

c.安装管理插件命令:rabbitmq-plugins enable rabbitmq_management

安装成功,在浏览器中输入 http://127.0.0.1:15672/

输入来宾账号 guest 密码 guest ,成功登陆进来,是不是有点小激动。

guest 账号是管理员账号,可以添加Exchanges,Queues,Admin。但我们一般不使用guest账号,继续用命令来添加账号和权限。

d:添加用户:rabbitmqctl.bat add_user username password

e:添加“超级管理员”角色: rabbitmqctl.bat set_user_tags username administrator

mymq账号也是超级管理员了,Can access virtual hosts :No access ,可以看到还没有能够访问的虚拟机,接下来添加虚拟机。

f: 添加虚拟机: rabbitmqctl add_vhost vhostName

myvhost虚拟机并没有Users,接下来给虚拟机绑定账号。

g:定虚拟机和用户权限:rabbitmqctl set_permissions -p 虚拟机名称 账户名 ".*" ".*" ".*"

h:处于习惯我一般删除掉guest账号:rabbitmqctl.bat delete_user username

好了,重新登陆管理页面,一切正常,接下来开始实战了。

EasyNetQ的基本使用

项目中安装EasyNetQ

EasyNetQ是依赖于RabbitMQ.Client的,所以会被一并安装到项目中。

Publish发布消息

Model有个Queue的特性,定义Queue名称和Exchange名称。然后直接用Publish方法把Msg通过Model指定的交换机推送到指定队列去。

运行代码,看看MQ的管理页面。

已经创建了Model指定的交换机TestQueue.Exchange, Type:topic , Features:D 。D:Durable 说明默认创建的交换机是持久化的。

因为还没有订阅消息,所以在Queues中还看不到对应的队列。

Subscribe订阅消息

为什么要在订阅代码上套一个while(true)了? 是为了把控制台程序模拟成Windows服务,因为控制台程序运行一闪而过,没办法真正订阅到MQ的消息。

实际开发中,一般用Topself来把控制台程序发布成Windows服务,后面有时间再写一篇关于Topself的学习博客。

再重复刚才的Publish操作,测试下整个流程。

自定义Topic

这样消息会被发送到名称为Test.开头的所有Queue队列中。

SendReceive

通过send和receive可以将消息发送到指定队列。

以上就是RabbitMQ基本概念和原理实例的详细内容,更多请关注php中文网其它相关文章!

RabbitMQ基本概念和原理的更多相关文章

  1. RabbitMQ基本概念和使用

    RabbitMQ是一个消息代理,核心原理:发送消息,接收消息. RabbitMQ主要用于组件之间的解耦,消息发送者无需知道消息使用者的存在,反之亦然.   单向解耦                   ...

  2. RabbitMQ如何工作和RabbitMQ核心概念

    RabbitMQ是一个开源的消息代理软件.它接受来自生产者的消息并将其传递给消费者.它就像一个中间人,可以用来减少Web应用程序服务器的负载和交付时间. RabbitMQ如何工作 让我们简要介绍一下R ...

  3. Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)

    ORACLE集群概念和原理(二) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  4. Java中的泛型 (上) - 基本概念和原理

    本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...

  5. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  6. 【转】Bloom Filter布隆过滤器的概念和原理

    转自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看数学之美丽,里面有提到布隆过滤器的过滤垃圾邮件,感觉到何其的牛,竟然有这么高效的 ...

  7. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...

  8. iptables实用教程(一):基本概念和原理

    概述 iptables是linux自带的防火墙软件,用于配置IPv4数据包过滤或NAT(IPv6用ip6tables). 在linux上,防火墙其实是系统内核的一部分,基于Netfilter构架,基本 ...

  9. LDAP概念和原理介绍

    LDAP概念和原理介绍 相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”.“LDAP的主要产品”.“LDAP的基本模型”.“ ...

随机推荐

  1. SAP FI配置步骤

    http://blog.sina.com.cn/s/blog_8eda1a620100uwzj.html No. 配置对象 事务代码 配置内容 路径 备注 1 定义公司 OX15 企业结构>定义 ...

  2. bitnami_redmine3.3.0-1 问题及备份恢复

    1. 服务不见了处理方法: 安装Bitnami Redmine之后,会生成5个与之相关的进程,分别是 redmineApache redmineMySQL redmineSubversion redm ...

  3. Python 一键commit文件、目录到SVN服务器

    一键commit文件.目录到SVN服务器   by:授客 QQ:1033553122 实现功能 1 测试环境 1 代码show 1   实现功能 一键提交文件.目录到svn 测试环境 Win7 64位 ...

  4. 「Android」 基于Binder通信的C/S架构体系认知

    C/S架构(Client/Server,即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,第二层是通过网络结合了数据库服务器.简单的说就是第一层是用户表示层,第 ...

  5. Apache httpd.conf配置文件主要内容解释

    1 ServerRoot 配置 ["ServerRoot" 主要用于指定Apache的安装路径,此选项参数值在安装Apache时系统会自动把Apache的路径写入.Windows安 ...

  6. python使用sax实现xml解析

    之前在使用xml解析的时候,在网上搜了很多教程,最终没有能按照网上的教程实现需求. 所以呢,只好自己去看源码,在sax的__init__.py下看到这么一段代码: 1 def parse(source ...

  7. PhantomJs浏览器下载

    下载地址: http://phantomjs.org/download.html 链接:https://pan.baidu.com/s/1g9ZHLm0Fg56LN30CsDu-CA 密码:qhar

  8. 【RHEL7.0】软件包管理

    1.常用的RPM软件包命令 安装软件的命令格式  rpm –ivh filename.rpm 升级软件的命令格式  rpm –Uvh filename.rpm 卸载软件的命令格式  rpm –e fi ...

  9. February 22nd, 2018 Week 8th Thursday

    Confine yourself to the present. 着眼当下. The morning wind spreads its fresh smell, we should get up an ...

  10. Docker: docker network 容器网络

    容器网络命令 : docker network --help 常用的是 docker network create/ls/rm/inspect 容器网络类型,一共有以下5种 bridge–net=br ...