zoukankan      html  css  js  c++  java
  • RabbitMQ的入门了解

    (1)简介:RabbitMQ 采用 Erlang 语言基于 AMQP 标准开发。AMQP定义了网络交换的数据格式。就像http协议规定了请求和响应的数据格式。

    • AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP。
    • 还有一种实现mq的方式:JMS,是javaEE的13种规范的一种,定义了数据通信的具体操作过程,是一个应用程序接口API。

    (2)rabbitMQ的基础架构
    image

    • Broker(经纪人):接收和分发消息的应用,RabbitMQ Server就是 Message Broker
    • Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建exchange/queue 等
    • Connection:publisher/consumer 和 broker 之间的 TCP 连接
    • Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销
    • Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
    • Queue:存储消息的容器,消息最终被送到这里,等待 consumer 取走
    • Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

    (3)端口号

    • 5672:rabbitMq的编程语言客户端连接端口
    • 15672:rabbitMq管理界面端口
    • 25672:rabbitMq集群的端口

    (4)用户的分类:

    1. 超级管理员(administrator):可登录管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
    2. 监控者(monitoring):可登录管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
    3. 策略制定者(policymaker):可登录管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息。
    4. 普通管理者(management):仅可登录管理控制台,无法看到节点信息,也无法对策略进行管理。
    5. 其他:无法登录管理控制台,通常就是普通的生产者和消费者。

    (5)rabbitmq的运转流程(简单的入门级别)
    image

    • 生产者发送消息
      1. 生产者创建连接(Connection),开启一个信道(Channel),连接到RabbitMQ Broker;
      2. 声明队列并设置属性;如是否排它,是否持久化,是否自动删除;
      3. 将路由键(空字符串)与队列绑定起来;
      4. 发送消息至RabbitMQ Broker;
      5. 关闭信道;
      6. 关闭连接;
    • 消费者接收消息
      1. 消费者创建连接(Connection),开启一个信道(Channel),连接到RabbitMQ Broker
      2. 向Broker 请求消费相应队列中的消息,设置相应的回调函数;
      3. 等待Broker投递响应队列中的消息,消费者接收消息;
      4. 确认(ack,自动确认)接收到的消息;
      5. RabbitMQ从队列中删除相应已经被确认的消息;
      6. 关闭信道;
      7. 关闭连接;
  • 相关阅读:
    分页
    用于dbnull的数据转换。因为用convert.to无法转换dbnull类型
    sqldbhelper
    sql 去重
    wcf 双工
    WCF使用泛型方法的问题
    wpf 查找页面的所有TextBox
    WebService流行框架之Axis和CXF
    Hibernate SQL方言 (hibernate.dialect)
    Hibernate联合主键映射
  • 原文地址:https://www.cnblogs.com/rbwbear/p/15539937.html
Copyright © 2011-2022 走看看