原文: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,服务端会根据这两个属性响应消息。最后使用通道给服务端发送消息。

实现效果

生产者:

消费者:

发布了30 篇原创文章 · 获赞 5 · 访问量 1万+

Net操作RabbitMQ的更多相关文章

  1. Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  2. Python操作RabbitMQ

    RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...

  3. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  4. Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy   Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...

  5. python - 操作RabbitMQ

    python - 操作RabbitMQ     介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议.MQ全称为Mess ...

  6. 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ

    本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...

  7. Python之路第十二天,高级(4)-Python操作rabbitMQ

    rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...

  8. python操作---RabbitMQ

    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序 ...

  9. Python 之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    一.Memcached Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负债.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  10. 一个C#操作RabbitMQ的完整例子

    一.下载RabbitMQ http://www.rabbitmq.com/install-windows.html 二.下载OTP http://www.erlang.org/downloads 三. ...

随机推荐

  1. XGBoost 引入 - 提升树

    认识提升树 这个boosting 跟 Adaboost 不同. Adaboost 是通过上一轮的误差率来动态给定一下轮样本不同的权重来学习不同的模型. 现在的方式, 更多是基于残差 的方式来训练. 一 ...

  2. eclipse 离线安装activiti

    1. 下载activiti离线安装包, activiti-designer-1.8.zip 2. 将上图4个jar包放在eclipse的features文件夹中 3. 打开eclipse-->H ...

  3. nginx 日志问题(\x22)

    nginx 日志问题(\x22) 问题: 1.request_body中含有中文时,nginx日志会转换为十六进制. 2.nginx记录问题 POST /xxxxx HTTP/1.1|200|4266 ...

  4. pandas基础操作

    ```python import pandas as pd import numpy as np ``` ```python s = pd.Series([1,3,6,np.nan,44,1]) s ...

  5. bert模型参数简化

    我们下载下来的预训练的bert模型的大小大概是400M左右,但是我们自己预训练的bert模型,或者是我们在开源的bert模型上fine-tuning之后的模型的大小大约是1.1G,我们来看看到底是什么 ...

  6. Python面试题(4)

    1.Python下多线程的限制以及多进程中传递参数的方式 Python多线程有个全局解释器锁,这个锁的意思是任一时间只能有一个线程运用解释器.并发不是并行. 多进程间同享数据,能够运用multipro ...

  7. 201871010121 王方 《面向对象程序设计(java)》 第二周学习总结

    这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475 ...

  8. pycharm调试添加命令行参数

    UI界面: Run->Edit Configurations->Parames

  9. MVC Core 使用TagHelper扩展几个插件

    未完待续... 案例1:按钮权限校验,无权限不显示,利用TagHelper控制元素是否输出 [HtmlTargetElement("tc-permission", TagStruc ...

  10. RabbitMQ六种队列模式-工作队列模式

    前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列 [本文]RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...