Net操作RabbitMQ
文章目录
1 安装
RabbitMQ官网下载地址:
RabbitMQ的服务器-3.7.14.exe
RabbitMQ是由Erlang语言开发的,所以使用RabbitMQ需要安装Erlang。
Erlang官网下载地址:
otp_win64_21.3.exe
RabbitMQ引用:

2 管理界面
安装了Rabbitmq后,默认也安装了该管理工具,执行命令即可启动
## 先定位到rabbitmq安装目录
rabbitmq-plugins enable rabbitmq_management
- 1
- 2

启动后,直接在浏览器地址输入:http://localhost:15672/ 默认账号密码都是:guest
如果无法在web页打开管理界面,可以重启下RabbitMQ
net stop RabbitMQ && net start RabbitMQ
- 1
管理界面相关操作参考博文:rabbitmq后台管理界面
3 RabbitMQ的基本概念
rabbitmq:采用AMQP高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦。
AMQP:高级消息队列协议使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能。
Broker:简单来说就是消息队列服务器实体
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
Queue:消息队列载体,每个消息都会被投入到一个或多个队列
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
Routing Key:路由关键字,exchange根据这个关键字进行消息投递
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离
producer:消息生产者,就是投递消息的程序
consumer:消息消费者,就是接受消息的程序
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务
4 RabbitMQ的六种工作模式
六种模式官方文档:
https://www.rabbitmq.com/getstarted.html
自己写的DEMO链接:
https://download.csdn.net/download/zt102545/11656242
4.1 简单模式

说明:
一个生产者P发送消息到队列Q,一个消费者C接收。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel向队列中发送消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue, 创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:

消费者:

4.2 工作模式

说明:
一个生产者,多个消费者,每个消费者获取到的消息唯一,多个消费者只有一个队列。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建一个持久的队列queue,用通道channel创建一个消息属性,使消息属性持久,不受重启影响。使用通道channel向队列中发送消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建一个持久的队列queue并设置每次只读取一条消息,创建消费者consumer并监听队列,获取消息处理后手动应答。
实现效果:
生产者:

消费者:

4.3 发布/订阅模式

说明:
一个生产者将消息发送到交换机,交换机以广播的模式,将消息发送到绑定到该交换机的队列上,消费者从队列里获取消息。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为fanout,使用通道向交换机发送消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为fanout,使用通道channel创建队列queue并绑定到交换机上, 创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:

消费者:

4.4 路由模式

说明:
生产者发送消息到交换机并且要指定路由key,消费者将队列绑定到交换机时需要指定绑定key,交换机根据路由key将消息分发给相应的绑定key的队列。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Direct,使用通道向交换机发送消息并指定路由key值。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Direct,使用通道channel创建队列queue后绑定到交换机上并指定绑定key, 创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:

消费者:

4.5 主题模式

说明:
生产者P发送消息到交换机X,交换机类型为Topic,交换机根据绑定队列的routing key的值进行通配符匹配;符号#:匹配一个或者多个词lazy.# 可以匹配lazy.irs或者lazy.irs.cor
符号* :只能匹配一个词lazy.* 可以匹配lazy.irs或者lazy.cor
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Topic,使用通道向交换机发送消息并指定路由key值。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Topic,使用通道channel创建队列queue后绑定到交换机上并指定绑定key, key值带通配符,创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:

消费者:

4.6 RPC

说明:
消费者C主动向生产者P发出请求消息Request,该消息带有CorrelationId和ReplyTo属性,分别用于识别哪一条消息和哪个队列。生产者P收到请求后处理消息,将处理后的消息根据CorrelationId和ReplyTo属性向消费者C响应消息。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue, 创建消费者consumer并监听队列,从队列中读取消息,从消息里获取客户端通道的属性BasicProperties,根据属性BasicProperties获取到响应的队列,向响应的队列发送处理后的消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建随机队列queue,创建消费者consumer并监听队列,从队列中读取消息。使用通道channel创建通道属性BasicProperties,生成一个GUID赋值给CorrelationId,随机队列名称赋值给ReplyTo,服务端会根据这两个属性响应消息。最后使用通道给服务端发送消息。
实现效果:
生产者:
消费者:

Net操作RabbitMQ的更多相关文章
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python操作RabbitMQ
RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...
- python - 操作RabbitMQ
python - 操作RabbitMQ 介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Mess ...
- 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ
本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...
- Python之路第十二天,高级(4)-Python操作rabbitMQ
rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...
- python操作---RabbitMQ
RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序 ...
- Python 之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
一.Memcached Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负债.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...
- 一个C#操作RabbitMQ的完整例子
一.下载RabbitMQ http://www.rabbitmq.com/install-windows.html 二.下载OTP http://www.erlang.org/downloads 三. ...
随机推荐
- JMETER 生成测试报告
JMETER测试报告样例 JMETER 提供的生成测试报告功能,能够生成漂亮的HTML测试报告. 上图是测试统计图 20个用户并发,测试时长一分钟,发起流程320次,没有出错,TPS为6.5,平均发起 ...
- 'root'@'localhost'不能登录问题
鉴于我在遇到这个问题时,在网上搜索到几十个答案都是进行更改密码解决该问题,然并没有卵用.最后还是让小编找到了解决方法,希望大家遇到该问题时能够节省时间.解决方法如下: #mysql -u root ...
- 【IntelliJ IDEA新手入门】IDEA如何快速搭建Java开发环境
作为IntelliJ IDEA mac新手,IDEA如何快速搭建Java开发环境呢? 今天小编就给大家带来了IntelliJ IDEA mac使用教程,想知道IDEA如何快速搭建Java开发环境?那就 ...
- Python--RE--?
?在re中默认匹配前一个字符0次或者1次 比如: aal? 默认匹配aal,或者aa 即整体匹配前一个字符串,但是可以舍弃最近的一个字符或者不舍弃 re模块 常用正则表达式符号 '.' 默认匹配 ...
- 使用async进行结构化并发程序开发
异步风格的函数: 继续来学习async相关的东东,对于它其实可以用到函数上,也就是用它可以定义一个异步风格的函数,然后在该函数中再来调用普通的函数,下面来瞅一下: 其实“GlobalScope.asy ...
- 201871010132-张潇潇-《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 微信2.1 for Windows发布 微信群可多人语音或视频通话
5月31日,windows电脑版微信发布更新,微信2.1 for Windows带来最主要的功能是微信群可以多人语音或视频通话了,建个家庭群组,常年在外工作的家人也可以每天见面了,多亲切! 除了可以建 ...
- 面向对象高级B(元类)
元类 python一切皆对象,类实际上也是一个一个对象 类是一个对象,那他一定是由一个类实例化得到,这个类就叫元类 如何找元类 class Person: def __init__(self, nam ...
- selenium 中在 iframe 内的元素定位
有些时候 元素明明就在 但是通过什么方式定位都提示 定位不到元素 此时就要考虑元素是不是内嵌在iframe 中 对于内嵌在 ifra中的元素定位 首先定位到 iframe 元素 例如 iframe = ...
- 26 配置TensorFlow 1.9
https://www.ctolib.com/topics-133854.html sudo apt install libatlas-base-dev pip3 install tensorflow ...
