首页 > 其他分享 >rabbitmq

rabbitmq

时间:2023-02-16 15:33:52浏览次数:47  
标签:Exchange 队列 rabbitmq 发送 生产者 消息

rabbitmq

  1. 基础简介

    • 由LShift提供的一个消息队列协议(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang
    • rabbitmq包含的关键字
      • img
    • 消息队列使用过程
      • img
    • 组成部分
      • img
    • 场景:
      • 系统解耦、异步通信和流量削峰,延迟通知、最终一致性保证、顺序消息、流式处理
  2. 原理

    1. AMQP的核心思想就是将生产者和消费者隔离开,生产者从不直接将消息发送给队列
  3. Exchange的类型

    1. direct模式
    • img
    • 所有发送给Direct Exchange的消息被转发给具有指定RouteKey的Queue(发送给与RouteKey绑定的队列)
    1. fanout
    • img
    • 所有发送给Fanout Exchnage的消息被转发给与该Exchange绑定的所有Queue上(不需要处理RouteKey,只需要将队列绑定在Exchange上)
    1. topic(direct的扩展)
      • img
      • 所有发送到Topic Exchange的消息被转发到能和Topic匹配的Queue上(对RouteKey通配符模糊匹配)
    2. header
      • 根据发送的消息内容中的headers属性进行匹配
  4. 产生问题的情况有哪一些

    1. 为什么要创建信道而不是直接使用Tcp连接
      • 创建tcp和销毁是耗费性能的,特别是数据量大的时候
      • Rabbitmq采用类似Nio的做法采取Tcp连接复用
    2. 防止Rabbitmq数据丢失的方法
      1. 生产者消息确认
        • tx(事务模式)
          • 生产者发送消息之前,通过channel.txSelect开启一个事务并发送消息, 如果消息投递server失败,进行事务回滚channel.txRollback,然后重新发送, 如果server收到消息,就提交事务channel.txCommit
            *注意点:同步操作,一条消息发送会是发送端阻塞等待rabbitmqserver回应,生产者生产消息的吞吐量和性能大大降低
        • confirm
          • 先将channel设置为confirm模式,生产者发送一个消息,rabbitmq如果接收到了发送的消息,就会回调生产者本地的接口,通知生产者收到发送的消息,如果在接收消息的时候出现异常,就会回调接口,通知生产者消息接受失败,可再次重发消息
          • ConfirmSelect() 等待所有消息确认,如果所有的消息都被服务端成功接收返回true,只要有一条没有被成功接收就返回false
          • WaitForConfirms()
          • WaitForConfirmOrDie
      2. 消费者消息确认
        • ack机制
          • 自动ack:当RabbbitMQ将消息发送给消费者后,消费者端接收到消息后,不等待消息处理结束,立即自动回送一个确认回执
          • 手动ack:自动确认可能会出现消息丢失的问题,如果可以让消费者在接收消息时不立即返回确认回执,等到消息处理完成后(或者完成一部分的逻辑)再返回确认回执
      3. Rabbitmq消息持久化
        • 创建队列交换机的时候将其持久化,但不持久队列里面的数据(队列Exchange持久化)
        • 发送消息持久化(消息持久化)
    3. 如何保证消息队列消费的幂等性
      1. 利用消息做唯一主键,或者用redis的set操作
      2. 生产消息给消息加全局唯一Id,消费者消费根据id去redis查询消息是否消费过
    4. 如何保证消息顺序消费
  5. 链接

标签:Exchange,队列,rabbitmq,发送,生产者,消息
From: https://www.cnblogs.com/blackamon/p/17126966.html

相关文章

  • 简单-SpringBoot整合RabbitMQ
    目录1.windows下安装erlang环境和rabbitMq服务1.1客户端页面2.准备工作2.1pom依赖2.1启动类注解开启:@EnableRabbit2.2application配置文件3.队列的简单使用3.1配置交换器......
  • RabbitMQ-消息中间键
    MQ,中文是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。快速入门1.publisher实现publicclassPublisherTest{@Testpubl......
  • RabbitMQ 访问被拒“NOT_ALLOWED - access to vhost '/' refused for user”
    RabbitMQ访问被拒“NOT_ALLOWED-accesstovhost'/'refusedforuser”原因是用户未分配权限一、用户角色说明1、超级管理员(administrator)可登陆管理控制台,......
  • RabbitMQ重启后数据和用户丢失
    1、问题描述:在重启RabbitMQ服务后,数据丢失,用户丢失。2、问题原因:在RabbitMQ服务启动后,对主机名进行过修改,而修改主机名会导致数据存储路径发生变化,如果不重启RabbitMQ不会......
  • .NET为什么推荐RabbitMQ消息队列作为首选开发工具
    支持.NetCore(2.0及以上)/.NetFramework(4.5及以上),可以部署在Docker,Windows,Linux,Mac。RabbitMQ作为一款主流的消息队列工具早已广受欢迎。相比于其它的MQ工具,Ra......
  • .NET为什么推荐它作为RabbitMQ消息队列的首选开发工具
    支持.NetCore(2.0及以上)/.NetFramework(4.5及以上),可以部署在Docker,Windows,Linux,Mac。RabbitMQ作为一款主流的消息队列工具早已广受欢迎。相比于其它的MQ工具,Rab......
  • RabbitMQ系列(一)--------安装配置
    安装RabbitMQ 前提先要配置好环境 需要先安装Erlang 1修改主机名    RabbitMQ是通过主机名进行访问的,必须指定能访问的主机名。    命令: #vim......
  • RabbitMQ 快速入门
    RabbitMQ是一款实现了AMQP协议的消息中间件,使用Erlang编写。这篇博客简单介绍一下RabbitMQ,但不介绍特定库的API核心概念RabbitMQ存在一下概念,清楚了一下概念也......
  • Spring Boot RabbitMQ 应用场景
    1.前言消息队列是一个容器,可以对程序产生的消息进行存储。消息队列的主要用途是削峰、异步、解耦,我们用一个实际场景来解释下。有一家果汁生产企业,张三是采购员,负责采购......
  • RabbitMQ简单消息发送与接收
    RabbitMQ简单消息发送与接收​​1、前言​​​​2、简单消息发送与接收实战​​​​2.1引入依赖​​​​2.2消息生产者​​​​2.3消息消费者​​​​2.4测试​​1、前......