zoukankan      html  css  js  c++  java
  • RabbitMQ入门

    RabbitMQ使用的端口:

      5672  amqp协议

      15672 后台管理界面

      25672 当搭建rabbitMQ集群时使用

    virtual host  相当于mysql里的数据库db1,db2等,使用RabbitMQ之前先创建建用户和virtual host 然后给virtual host指定用户,只有指定的用户可以访问该virtual host 。 

    持久化,消息是存储在内存中的队列里的,当RabbitMQ宕机后,内存中的消息会丢失。而设置为持久化后,会把消息保存在硬盘中,重启RabbitMQ会从硬盘中读取消息到内存,消息不会丢失。

      

    消息确认机制 ,生产者发送消息到RabbitMQ,怎么知道RabbitMQ一定收到消息了呢?可以采用两种方式。

    第一种是事务机制,因为RabbitMQ是基于AMQP协议的。本身实现了事务,可以采用channel.txSelect()开启事务,txCommit()提交事务,txRollback回滚事务

    第二种是confirm模式,channel.confirmSelect()开启confirm模式,waitforConfirm()等待RabbitMQ确认是否发送成功,或者添加监听器。

    消息应答模式,消息应答分为自动确认和手动确认两种。

    自动确认表示的是当消费者收到消息后,消息就从队列里自动删除了。当消费者正在处理消息时,消费者突然宕机了,该条消息还没有真正被消费完,会造成消息丢失。

    手动确认表示的是只有当消费者回复ack后,消息才从队列里删除。当消费者宕机时不会造成消息丢失,因为消息还没有从队列中删除。

    交换机的类型

    fanout   对应发布订阅

    direct    对应路由模式

    topic     对应主题模式

    header  这种类型的交换机用到很少

    RabbitMQ中的几种队列模式

    1 简单队列

     一个生产者发送消息到队列,一个消费者从队列里获取消息。

    2 工作队列

     一个队列可以有多个消费者

    之所以有这种模型,是由于发送消息一般是比较快,而消费消息比较耗时,为了提高效率,采用了两个消费者。

    这种模型又分为两种情况,第一种情况是采用轮训分发机制(round-robin),不管C1和C2哪个的消息处理速度比较快,他们消费的消息数量基本是相同的(消息应答设置自动确认)。

    第二种情况是采用公平分发机制(fairdispatcher),C1和C2哪个处理速度快,消费的消息也多。(消息应答设置为手动确认,并且Qos设置为1,表示每次只发送或者接受一个消息)

     3 发布订阅模式

    一个消息被多个消费者消费(交换机的类型为fanout,可以理解为不处理路由键)

     生产者将消息发送到交换机上,只要队列绑定到了该交换机,消息就被转发到该队列,每个消费者从自己的队列中获取消息

    4 路由模式

    与发布订阅模式不同的是,不是所有的队列都会受到消息。交换机转发消息时,会根据队列和交换机绑定时设置的路由键(完全匹配)来转发。

    交换机类型为direct,可以为处理路由键

    5 主题模式

    交换机类型是topic

     队列和交换机绑定时可以含有通配符

    * 号只能匹配一个单词

    # 号能匹配0个或多个单词

  • 相关阅读:
    js正则表达式
    js遍历对象属性
    C# 带Cookies发送请求
    C# Cookies设置和读取
    C# ref 和 out 的使用
    jq 禁用复选框 和输入框
    C++学习之嵌套类和局部类
    C++学习之this指针
    C++学习之运算符重载的总结
    Labview中引用,属性节点,局部变量之间的区别
  • 原文地址:https://www.cnblogs.com/moris5013/p/12268212.html
Copyright © 2011-2022 走看看