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. Android 常用数据操作封装类案例

    1.DbHelper类 继承自SQLiteOpenHelper类,实现对数据库的基本操作 package com.example.utils; import android.content.Conte ...

  2. blfs(systemd版本)学习笔记-构建google-chrome浏览器

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.google-chrome浏览器官网下载地址 我只找到了deb包和rpm包的下载地址 1.https://dl.google ...

  3. Linux配置防火墙端口 8080端口

    1.查看防火墙状态,哪些端口开放了 /etc/init.d/iptables status 2.配置防火墙 vi /etc/sysconfig/iptables   ################# ...

  4. vuejs通过filterBy,orderBy实现搜索筛选,降序排序数据实例

    直接贴代码了: 先上输入前的样子: <style> #example{margin:100px auto;width:600px;} .show{margin:10px;} #search ...

  5. vue2 设置网页title的问题

    好东东,没个标题看着多难受 看到1文章  http://blog.csdn.net/qishuixian/article/details/72912368 推荐使用 vue-wechat-title插 ...

  6. 系统调用syscall---用户态切换到内核态的唯一途径

    1.应用程序有时需要内核协助完成一些处理,但是应用程序不可能执行内核代码(主要是安全性考虑), 那么,应用程序需要有一种机制告诉内核,它现在需要内核的帮助,这个机制就是系统调用. 2.系统调用的本质是 ...

  7. 企业建立成功 DevOps 模式所需应对的5个挑战

    [编者按]本文作者为 Kevin Goldberg,主要介绍要想成功部署 DevOps 模式,企业所需应对的5大挑战与问题.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 要给 DevOps ...

  8. Redis数据类型及命令

    Redis简介 Redis是一个完全开源免费的, 是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存 ...

  9. python第一百零九天---Django 4

    session :1. Session 基于Cookie做用户验证时:敏感信息不适合放在cookie中 a. Session原理 Cookie是保存在用户浏览器端的键值对 Session是保存在服务器 ...

  10. 孟岩:怎么看待Coin与Token的关系?

    由于中英文的隔阂,很多在英文世界里一目了然.不言自明的词汇,翻译成中文之后意义模糊.难以理解.比如在区块链和加密数字货币领域,coin 和 token 的区别,很长时间困扰着我们,并且引发争论. 后来 ...