一、Connection 、Channel、Queue等之间关系

在Mq中connection以及Channel Exchange Queue 是什么样的关系,我们可以从下图可以可以进行了解,图片来自黑马公开课视频。我们不管作为消息的生产者(Producer)或者消费者(Consumer)都是作为客户端(Client)连接到MQ服务器(Blocker Node)上。在生产者和消费者与RabbitMQ-Server 之间都是通过Connection进行连接。在Connection中存在Channel。消息通过连接发送到服务器上首先接收到的为交换机(Exchange),交换机根据消息信息以及交换机绑定的队列信息,分发到相应的消息队列(Queue)上。最后通过消费端的连接发送到消费者客户端上。


                                                                                                                                 
二、RabbitMq控制台介绍 以及在Java代码中相关的创建时机

在上一篇文章中我们讲解了RabbitMQ的安装介绍,最后我们启动后打开了一个RabbitMQ的一个控制台登录界面。接下来我们介绍一下登录控制台后的一些界面介绍。

  • overview(概述) :略过
  • Connects(连接数):

当前Mq运行中的当前保持连接的连接信息,其中包含了连接的虚拟主机路径(virtual host),链接的主机及端口、那个用户连接的,状态等信息。在java代码中通过ConnectionFactory 的 newConnection() 后进行创建一个连接,此时通过当前页面便可以展示列出来。当使用connection.close()之后 连接将关闭。

//创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置主机地址
connectionFactory.setHost("172.18.255.186");
//设置连接端口
connectionFactory.setPort(5672);
//设置虚拟主机地址
connectionFactory.setVirtualHost("/myhost");
//设置链接用户名以及密码
connectionFactory.setUsername("xiaohui");
connectionFactory.setPassword("root");
//创建连接
Connection connection = connectionFactory.newConnection();
  • Channels(信道)

链接中的信道信息:Channel是在连接中存在的,一个Connection中可以有多个Channel。在Java代码中 通过连接来创建信道。当代码执行完 connection.createChannel(); 之后我们通过如下界面可以看到新创建的信道信息。

创建信道java代码如下(ConnectionUtils为自定义的一个工具类,其中getConnection方法实现代码为上面connections介绍中代码):

Connection connection = ConnectionUtils.getConnection();
//创建渠道
Channel channel = connection.createChannel();
  • Exchanges(交换机)

Exchange作为消费的生产者和消息队列的一个中介,其将Producer生产的消息进行分发给消息队列。在没有使用交换机的简单模式中,实际上则使用的是默认的交换机(AMQP-Default)

在使用交换机前我们需要对交换机进行声明(declared ),声明之后我们还需要将消息队列进行绑定到交换机上。

//获取连接
Connection connection = ConnectionUtils.getConnection();
//创建信道
Channel channel = connection.createChannel();
//声明交换机
/*** 参数一:交换机名称* 参数二:交换机类型:fanout \topic \direct*/
channel.exchangeDeclare(Producer.FANOUT_EXCHANGE, BuiltinExchangeType.FANOUT);/*** 声明队列* durabe:持久化的消息,mq重启后消息仍在。* exclusive :独占的,一个消息队列独占一个连接*/
channel.queueDeclare(Producer.FANOUT_QUEUE_1,true,false,false,null);
channel.queueDeclare(Producer.FANOUT_QUEUE_2,true,false,false,null);//队列绑定交换机
channel.queueBind(Producer.FANOUT_QUEUE_1,Producer.FANOUT_EXCHANGE,"");
channel.queueBind(Producer.FANOUT_QUEUE_2,Producer.FANOUT_EXCHANGE,"");
  • Queues(消息队列)

消息队列,在控制台页面中我们在queues页签中我们可以看到服务器端当前的消息队列信息。在java代码中我们需要先对消息队列进行声明后才可以使用。点击某一队列,在队列中我们也可以查看当前队列的消息信息。

Java 声明以及发送消息代码如下:

 Connection connection = ConnectionUtils.getConnection();
//创建渠道
Channel channel = connection.createChannel();
//声明创建队列
channel.queueDeclare(QUEUE_NAME,true,false, false, null);//发送消息
String msg = "再来一条hahahah。。。。";
channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
//释放资源(关闭渠道 以及连接)
channel.close();
connection.close();
  • Admin

在Admin的user下我们可以查询当前的MQ用户信息,以及新增用户信息并设置权限。

在Admin的Virtual Host下我们可以查看当前MQ的虚拟主机地址

RabbitMq(二) Connection、Channels、Exchanges、Queues 等基本概念介绍相关推荐

  1. 蓝牙音频双剑客(二)--高质量音频分布协议(A2DP) 概念介绍

    零. 概述 主要介绍下蓝牙协议栈(bluetooth stack)传统蓝牙音频协议之高质量音频分布协议(A2DP) 概念介绍,包括在协议栈中的架构,角色以及Source到Sink的发送Audio流程 ...

  2. RabbitMQ(二):Work Queues、循环分发、消息确认、持久化、公平分发

    内容翻译自:RabbitMQ Tutorials Java版 RabbitMQ(一):Hello World程序 RabbitMQ(二):Work Queues.循环分发.消息确认.持久化.公平分发 ...

  3. (RabbitMQ 二)Springboot项目中使用RabbitMQ的相关依赖

    (RabbitMQ 二)Springboot项目中使用RabbitMQ的相关依赖 RabbitMQ系列文章如下: (RabbitMQ 一[转载])windows10环境下的RabbitMQ安装步骤 h ...

  4. RabbitMQ—AMQP协议重要概念介绍

    原文作者:xiaolyuh 链接:https://www.jianshu.com/p/e55e971aebd8 来源:简书 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 目录 ...

  5. 2021年大数据Hadoop(二十六):YARN三大组件介绍

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 Yarn三大组件介绍 ResourceManager No ...

  6. android 电容屏(二):驱动调试之基本概念篇

    关键词:android  电容屏 tp 工作队列 中断 多点触摸协议 平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0  平台:S5PV310(sams ...

  7. java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

    转载自  java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWrite ...

  8. 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念

    linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. matlab 数值解 期权顶级啊,潮盈期权院高胜率交易技巧系列之二----期权交易策略及基于MATLAB统计套利介绍...

    主题: 高胜率交易技巧系列之二----期权交易策略及基于MATLAB统计套利介绍 会场流程: 13:30--14:00:参会嘉宾到场签名 14:00--14:45:期权知识 14:45--15:·25 ...

最新文章

  1. CentOS系统搭建OpenERP
  2. Allegro替换过孔类型
  3. 【MongoDB学习笔记7】深入MongoDB的删除(remove/drop)操作
  4. Redis-18Redis主从同步
  5. linux su无效_如何处理Linux中su命令无反应的情况
  6. 李松南:智能全真时代的多媒体技术——关于8K、沉浸式和人工智能的思考
  7. 微型计算机硬件性能取决于什么,微型计算机硬件系统的性能主要取决于
  8. JS的一些时间获取和计算公用方法封装
  9. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录
  10. pytorch 中Tensor.uniform_代替numpy.random.uniform/ permute函数 /torch.mm()和torch.matmul()
  11. 利用Python代码完成Fisher判别的推导
  12. 树莓派3b no wireless interfaces found 的解决办法 360wifi和树莓派结合
  13. android 录屏 sdk,浅析Android录屏 MediaRecorder
  14. Java OCR 图像智能字符识别技术,可识别中文
  15. 对计算的理解计算机科学导论论文,计算机科学导论论文
  16. 钉邮登陆 服务器响应超时,链接id服务器超时怎么回事啊
  17. python是哪种类型的语言-Python到底是强类型语言,还是弱类型语言?
  18. 触宝财报背后的出海术
  19. 计算机应用考试和计算机等级考试区别,计算机职称考试与计算机等级考试区别是什么...
  20. 芯片巨头恩智浦的前世今生

热门文章

  1. VUE自学日志03-模板语法
  2. 静态内部类、局部内部类、匿名内部类、lamda表达式
  3. Eclipse启动SpringCloud微服务集群的方法
  4. 监听浏览器的返回事件,禁止浏览器返回
  5. 微信公众号开发之获取用户信息
  6. oracle数据库环境实验报告,《Oracle数据库》实验报告二
  7. Java中==和equals、equals和hashCode的关系详解
  8. LinkedList源码阅读笔记(1.8)
  9. OpenJudge——0003:jubeeeeeat
  10. [ImportNew]Java线程面试题