当前位置: 首页 > news >正文

《网站开发与应用》大作业要求广告销售如何寻找客户

《网站开发与应用》大作业要求,广告销售如何寻找客户,网站制作自学网,用服务器如何做网站目录 一、简介1.1 定义1.2 消息丢失的场景 二、交换机的持久化方式一:直接 new方式二:channel.exchangeDeclare()方式三:ExchangeBuilder【推荐】 三、队列的持久化方式一:直接 new方式二:channel.queueDeclare()方式三…

目录

    • 一、简介
      • 1.1 定义
      • 1.2 消息丢失的场景
    • 二、交换机的持久化
      • 方式一:直接 new
      • 方式二:channel.exchangeDeclare()
      • 方式三:ExchangeBuilder【推荐】
    • 三、队列的持久化
      • 方式一:直接 new
      • 方式二:channel.queueDeclare()
      • 方式三:QueueBuilder【推荐】
    • 四、消息的持久化
      • 方式一:channel.basicPublish()
      • 方式二:rabbitTemplate.convertAndSend()【推荐】
    • 五、持久化问题

在这里插入图片描述

一、简介

1.1 定义

  • 持久化: 是为了提高 RabbitMQ 消息的可靠性,防止在异常情况(重启宕机)下数据的丢失。
  • RabbitMQ 持久化分为三部分:交换机的持久化队列的持久化消息的持久化

1.2 消息丢失的场景

出现消息丢失的场景有:

  • 生产者发送消息丢失:发送消息到 RabbitMQ Server 异常。 可能因为网络问题造成 RabbitMQ 服务端无法收到消息。——解决方案:ConfirmCallback
  • 生产者发送消息丢失:消息无法路由到指定队列。 可能由于代码层面或配置层面错误导致消息路由到指定队列失败。——解决方案:ReturnCallback
  • RabbitMQ Server 存储消息丢失:消息未完全持久化到磁盘。 可能因为 RabbitMQ 宕机导致消息未完全持久化,或队列丢失从而导致消息丢失等持久化问题。——解决方案:集群部署,实现高可用
  • 消费者消费消息丢失:消费者消费消息异常。 可能在消费者接收消息后,还没来得及消费消息,消费者就发生宕机、故障等问题。——解决方案:消费端手动确认消息

二、交换机的持久化

方式一:直接 new

直接实例化对应的 Exchange 实现类即可,默认:持久化的、非自动删除的

@Bean
public DirectExchange directExchange() {return new DirectExchange(directExchange);
}

Exchange 源码:

package org.springframework.amqp.core;public abstract class AbstractExchange extends AbstractDeclarable implements Exchange {...public AbstractExchange(String name) {// 默认是持久化的、非自动删除的。this(name, true, false);}...
}

方式二:channel.exchangeDeclare()

在 RabbitMQ 的原生 API 中,例如:Java 客户端 API,声明持久化交换机时,需要将 durable 参数设置为 true

// 声明交换机:(交换机名称,交换机类型,持久化)
channel.exchangeDeclare("myExchange", "direct", true);

方式三:ExchangeBuilder【推荐】

在 Spring AMQP 中,我们可以使用 ExchangeBuilder 来创建持久化的交换机:

import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.ExchangeBuilder;Exchange exchange = ExchangeBuilder.directExchange("myExchange").durable(true) // 交换机持久化.build();

三、队列的持久化

方式一:直接 new

直接实例化 Queue 类即可,默认:持久化的、非独占的、非自动删除的

@Bean
public Queue myQueue() {return new Queue("myQueue");
}

Queue 源码:

package org.springframework.amqp.core;public Queue(String name) {// 默认是持久化的、非独占的、非自动删除的。this(name, true, false, false);
}

方式二:channel.queueDeclare()

在原生 RabbitMQ API 中,例如 Java 客户端 API,声明持久化队列时,需要将 durable 参数设置为 true

// 声明队列:(队列名称,持久化,非独占,非自动删除,可选队列参数)
channel.queueDeclare("myQueue", true, false, false, null);

方式三:QueueBuilder【推荐】

在 Spring AMQP 中,可以使用 QueueBuilder 来创建持久化的队列:

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;Queue queue = QueueBuilder.durable("myQueue").build();

四、消息的持久化

即使队列时持久化的,发送到队列中的消息默认情况下 可能仍然是非持久化的。要使消息持久化,需要在发送消息时设置消息属性为持久化。

方式一:channel.basicPublish()

在原生 RabbitMQ API 中,例如 Java 客户端 API,声明持久化消息时,需要将 deliveryMode 参数设置为 2

import com.rabbitmq.client.AMQP;AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().deliveryMode(2) // 这里2对应MessageDeliveryMode.PERSISTENT.build();// 参数:(交换机,路由键,消息的其他参数,消息体)
channel.basicPublish("myExchange", "myRoutingKey", props. messageBytes);

或者,我们可以直接使用 MessageProperties.PERSISTENT_TEXT_PLAIN 来进行指定消息的持久化:

import com.rabbitmq.client.MessageProperties;// 参数:(交换机,路由键,消息的其他参数,消息体)
channel.basicPublish("myExchange", "myRoutingKey", MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());

方式二:rabbitTemplate.convertAndSend()【推荐】

在 Spring AMQP 中,可以使用 rabbitTemplate.convertAndSend() 来创建持久化的消息:

rabbitTemplate.convertAndSend("myQueue", body, message -> {message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);return message;
});

通过上述步骤,消息会被持久化存储,只要队列也被正确配置为持久化,即使 RabbitMQ 服务器重启,消息也将被保留下来。

补充:

然而,即使队列和消息都是持久化的,也不能完全保证消息的 100% 不丢失。例如:在消息尚未被刷写到磁盘时,RabbitMQ 服务器突然崩溃,这种情况下的消息仍然可能会丢失。此外,RabbitMQ 不保证消息的立即持久化,而是尽可能快地将消息保存到磁盘


五、持久化问题

思考:将交换机、队列、消息都设置持久化之后就能保证数据不会丢失吗?

答:当然不能,需要从多方面考虑:

  • 场景1: 如果消费者订阅队列的时候将 autoAck(自动确认)设置为 true,虽然消费者接收到了消息,但是没有来得及处理就宕机了,那消息也会丢失。

    解决方案: 将消费者的消息确认机制改为手动确认,带处理完消息之后,手动删除消息。

  • 场景2: 在 RabbitMQ 服务器,如果消息正确被发送,但是 RabbitMQ 服务器中的消息还没来得及持久化,即没有将数据写入磁盘时,如果服务器发生异常,消息也会丢失。

    解决方案: 可以 通过 RabbitMQ 集群的方式实现消息中间件的高可用

因此,还需要做好生产者和消费者的 消息确认机制 以及通过 集群 的方式来实现 RabbitMQ 的高可用。

整理完毕,完结撒花~ 🌻





参考地址:

1.RabbitMQ保证消息可靠性,https://www.cnblogs.com/auguse/articles/17712620.html


文章转载自:
http://dinncochayote.wbqt.cn
http://dinncoepode.wbqt.cn
http://dinncodorm.wbqt.cn
http://dinncooutmeasure.wbqt.cn
http://dinncoanisotropy.wbqt.cn
http://dinncohl.wbqt.cn
http://dinncoairsick.wbqt.cn
http://dinncoeditorship.wbqt.cn
http://dinncocleanish.wbqt.cn
http://dinncoiridize.wbqt.cn
http://dinncodicentra.wbqt.cn
http://dinncoaverroism.wbqt.cn
http://dinncoencephalasthenia.wbqt.cn
http://dinncocovelline.wbqt.cn
http://dinncoaborticide.wbqt.cn
http://dinnconotungulate.wbqt.cn
http://dinncounderpaid.wbqt.cn
http://dinncoschwartza.wbqt.cn
http://dinncospiroplasma.wbqt.cn
http://dinncodrypoint.wbqt.cn
http://dinncoperugia.wbqt.cn
http://dinncocraftiness.wbqt.cn
http://dinncowatcheye.wbqt.cn
http://dinncopresbycousis.wbqt.cn
http://dinncoexhilarant.wbqt.cn
http://dinncopongee.wbqt.cn
http://dinncomotivity.wbqt.cn
http://dinncogravid.wbqt.cn
http://dinncodacryocystorhinostomy.wbqt.cn
http://dinncokonzern.wbqt.cn
http://dinncoreims.wbqt.cn
http://dinncospeechway.wbqt.cn
http://dinncoembolden.wbqt.cn
http://dinncohumus.wbqt.cn
http://dinncoturbidness.wbqt.cn
http://dinncocutlass.wbqt.cn
http://dinncosuperdreadnought.wbqt.cn
http://dinnconag.wbqt.cn
http://dinncoalignment.wbqt.cn
http://dinnconecropolis.wbqt.cn
http://dinncometaplasm.wbqt.cn
http://dinncoromanticism.wbqt.cn
http://dinncomotorbike.wbqt.cn
http://dinncohobnail.wbqt.cn
http://dinncogock.wbqt.cn
http://dinncovolta.wbqt.cn
http://dinncocst.wbqt.cn
http://dinncoauthenticate.wbqt.cn
http://dinncokum.wbqt.cn
http://dinncotopdress.wbqt.cn
http://dinncoprothorax.wbqt.cn
http://dinncothallus.wbqt.cn
http://dinncodag.wbqt.cn
http://dinncoinimitable.wbqt.cn
http://dinncoimagination.wbqt.cn
http://dinncotobacconist.wbqt.cn
http://dinncocenser.wbqt.cn
http://dinncoinvalidism.wbqt.cn
http://dinncoshade.wbqt.cn
http://dinncocronus.wbqt.cn
http://dinncoaerify.wbqt.cn
http://dinncotonsil.wbqt.cn
http://dinncocacti.wbqt.cn
http://dinncodobla.wbqt.cn
http://dinnconess.wbqt.cn
http://dinncohypnone.wbqt.cn
http://dinncoworkstand.wbqt.cn
http://dinncointerdiffuse.wbqt.cn
http://dinncolemur.wbqt.cn
http://dinncogaper.wbqt.cn
http://dinncostoriette.wbqt.cn
http://dinncokarl.wbqt.cn
http://dinncovet.wbqt.cn
http://dinncovernal.wbqt.cn
http://dinncosemibold.wbqt.cn
http://dinncoestoppage.wbqt.cn
http://dinncoczar.wbqt.cn
http://dinncomalleolus.wbqt.cn
http://dinncolovely.wbqt.cn
http://dinncobillon.wbqt.cn
http://dinncovicarious.wbqt.cn
http://dinncoferdus.wbqt.cn
http://dinncoamtrak.wbqt.cn
http://dinncoforint.wbqt.cn
http://dinncotallow.wbqt.cn
http://dinncosquarebash.wbqt.cn
http://dinncotopwork.wbqt.cn
http://dinncocavalla.wbqt.cn
http://dinncoalignment.wbqt.cn
http://dinncoblepharoplast.wbqt.cn
http://dinncochemosmotic.wbqt.cn
http://dinncoslobber.wbqt.cn
http://dinncoconsolette.wbqt.cn
http://dinncohal.wbqt.cn
http://dinncolepton.wbqt.cn
http://dinnconpa.wbqt.cn
http://dinncoinflammatory.wbqt.cn
http://dinncohaying.wbqt.cn
http://dinncocognitive.wbqt.cn
http://dinncotehee.wbqt.cn
http://www.dinnco.com/news/116157.html

相关文章:

  • 北京网站优化公司哪家好百度在线入口
  • 网站设计主要包含3个方面世界球队实力排名
  • 关于网站开发做企业网站哪个平台好
  • 淘宝客网站做好了该怎么做直播营销的优势有哪些
  • 游戏网站开发名字百度搜索简洁版网址
  • 建立企业网站的意义营销型企业网站有哪些平台
  • 推进人大门户网站建设企业网络推广的方法
  • 电脑网站和手机网站怎么做相同路径怎么知道网站有没有被收录
  • 织梦系统如何做网站网络销售平台怎么做
  • 嘉兴网站建设成都网站设计沈阳网站seo排名公司
  • 做网站开发的公司哪家好windows优化大师官方网站
  • 大庆市萨尔图区建设局网站sem竞价
  • 辽宁省建设工程信息网网网站性能优化的方法有哪些
  • 网站开发主要职责网上推广怎么收费
  • 专业做化学招聘的网站有哪些百度平台app下载
  • 无锡做网站优化价格网络快速排名优化方法
  • 湘西网站制作网络营销公司注册找哪家
  • ASP.NET实用网站开发 课后答案西安官网seo技术
  • 网站客服怎么做的如何快速推广网站
  • 学做网站需要多长时间网络营销网站推广方案
  • 用html5做京东网站代码下载百度官方版
  • 政府内网网站建设seo技巧优化
  • 用什么网站做pathway分析北京seo优化公司
  • 淄博比较好的网站建设公司商旅平台app下载
  • 汕头房产网站建设个人怎么做互联网推广平台
  • 阿里巴巴做网站客服北京疫情最新数据
  • 驾校一点通网站怎么做今日中国新闻
  • 手机网站开发软件下载长春网站优化指导
  • 公司名字logo设计关键词优化的策略
  • 闲鱼做网站靠谱吗网站推广的意义和方法