消息中间件 rabbitMQ
参考内容:https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html
一、什么是RabbitMQ
RabbitMQ是一个由erlang 开发的AMQP(Advanced Message Queue)的开源实现。RabbitMQ是由 RabbitMQ Technologies Ltd 开发并技工技术支持。
erlang: 是一种通用的面向并发的编程语言,最早是由爱立信专门为通信应用设计的,控制交换机或者变换协议等。
二、原理
RabbitMQ 基本原理
Queue(队列)
rabbitMQ作用是存储消息,生产者产生消息发送到RabbitMQ内部对象Queue中,而消费者从Queue对列中取得数据
上边 是一个生产者对应一个消费者,当存在多个消费者订阅一个队列时,队列会将消息平分给其他消费者。但是每个消息处理时间不同,导致一些消费者一直忙碌,有些消费者处理完就一直空闲。
RabbitMQ使用 prefetchCount 来限制每次发送给消费者消息个数。
上边 prefetchCount = 1 指的是队列每次发送一条消息,当处理完再发送。
Exchange(交换器)
RabbitMQ 中存在多个队列,那么生产者如何指定消息发送给哪个队列呢?
生产者产生的消息并不是直接发送给Queue 的,而是经过Exchange,exchange 将消息路由给一个或者多个Queue,不符合路由规则的消息丢掉.
路由如何准确的将消息推送给Queue ? Binding, RabbitMQ 通过Binding 将 Exchange 与Queue 链接再一起,这样就直到要推送的消息去哪个队列
绑定(Binding)
Exchange和Queue的同时,一般会指定一个Binding Key,生产者将消息发送给Exchange的时候,一般会产生一个Routing Key,当Routing Key和Binding Key对应上的时候,
消息就会发送到对应的Queue中去。那么Exchange有四种类型,不同的类型有着不同的策略。也就是表明不同的类型将决定绑定的Queue不同,换言之就是说生产者发送了
一个消息,Routing Key的规则是A,那么生产者会将Routing Key=A的消息推送到Exchange中,这时候Exchange中会有自己的规则,对应的规则去筛选生产者发来的消息,
如果能够对应上Exchange的内部规则就将消息推送到对应的Queue中去。
Exchange Type
1.fanout 将所有发送到exchange 的消息发送到与它绑定的Queue 中
2.direct 发送到所有 binding key 与 routing key 匹配的 Queue
3.topic 模糊匹配发送
4.headers
根据发送消息的 headers 属性进行匹配
三、如何在 windows 上安装 RabbitMQ
安装 rabbitMQ 首先需要安装 erlang opt
1.下载安装 Erlang (安装版) https://www.erlang.org/downloads
2.下载RabbitMQ(二进制文件或者 window 安装版window install)https://www.rabbitmq.com/download.html
3.RabbitMQ 默认的端口 :5672 ,激活可视化的插件
切换到rabbitmq sbin 目录下
执行
rabbitmq-plugins.bat enable rabbitmq_management
管理员运行dos 执行重启
net stop RabbitMQ && net start RabbitMQ
浏览器查询 http://localhost:15672(需要先创建管理用户,如下)
四、rabbitMQ 创建用户、密码、权限
进入rabbitMQ sbin 目录
1.查看用户
rabbitmqctl.bat list_users
2.创建用户
rabbitmqctl.bat add_user 用户名 密码
3.设置管理员
rabbitmqctl.bat set_user_tags 用户名 administrator
最新文章
- C++ std::multimap
- 【代码笔记】iOS-页面之间的跳转效果
- hibernate笔记--双向一对多映射方法
- js-处理金额(正则表达式)
- ajax技术应用(转)
- [Spring] 事务级别定义
- Objective-C学习笔记---构造函数和析构函数
- C++基础笔记(二)C++对C的扩展
- 补鞋匠---Cobbler 服务器自动搭建
- iOS—— static和const联合使用;使用static const 与 #define
- 四、saltstack如何管理对象?
- cocos2d-x游戏开发系列教程-超级玛丽02-代码结构
- 64、django之模型层(model)--建表、查询、删除基础
- Spark第一个应用程序
- 使用python操作XML增删改查
- js实现可输入的下拉框
- js任意数组按下标相加
- 接口工具之postman
- [leetcode]236. Lowest Common Ancestor of a Binary Tree二叉树最近公共祖先
- Python之groupby
热门文章
- linux如何查看某个端口接收到的数据
- SQL脚本--总耗CPU最多的前个SQL --平均耗CPU最多的前个SQL
- C# DataTable Lamda GroupBy
- 生成器函数_yield_yield from_send
- mybatis入门篇:Mybatis高级查询
- 关于Chrome 67 以后版本无法离线安装扩展的解决方法
- linux/centos elasticsearch 环境搭建 安装 运行 使用
- Shiro的认证和权限控制
- QMap迭代器
- [持续交付实践] pipeline使用:Shared Libraries